阅读源码之路(三)

开发者留下的wtf: 

    public static String toString(final Annotation a) {
        final ToStringBuilder builder = new ToStringBuilder(a, TO_STRING_STYLE);
        for (final Method m : a.annotationType().getDeclaredMethods()) {
            if (m.getParameterTypes().length > 0) {
                continue;     //wtf?

            }

        想知道为什么 if( ) 后面跟了个continue......

        可能是把后面的语句放到if里面执行,  最后返回builder.build();


return type.isPrimitive() || type.isEnum() || type.isAnnotation()

                || String.class.equals(type) || Class.class.equals(type);

判断两个对象相等或都为null时返回true,不需要处理异常,  关键代码:

    private static boolean memberEquals(final Class<?> type, final Object o1, final Object o2) {
        if (o1 == o2) {
            return true;
        }
        if (o1 == null || o2 == null) {
            return false;

        }

非常典型的判断语句格式:        属性negeted : CharRange范围在 指定范围  之外 为true

public boolean contains(final CharRange range) {                          //判断range的范围start和end是否包含吗
        Validate.isTrue(range != null, "The Range must not be null");  //验证是否为null
        if (negated) {                        
            if (range.negated) {                                                              
                return start >= range.start && end <= range.end;        //如果全部包含输入的范围,返回true
            }
            return range.end < start || range.start > end;                     //不全在输入的范围,返回false
        }
        if (range.negated) {                                                                  
            return start == 0 && end == Character.MAX_VALUE;        //如果全包含,则判断start和end是否全部符合要求
        }
        return start <= range.start && end >= range.end;                //前面的条件都不满足, 如果不在start和end之间返回true
    }

一种产生hash值的方法:

        public int hashCode() {
            return 83 + start + 7 * end + (negated ? 1 : 0);

        }

toString() 方法: 

 private transient String iToString;         //私有化一个字符串, 不能被序列化, 仅用于toString()方法:

 public String toString() {
        if (iToString == null) {
            final StringBuilder buf = new StringBuilder(4);        //声明final,  不能修改 
            if (isNegated()) {
                buf.append('^');
            }
            buf.append(start);
            if (start != end) {
                buf.append('-');
                buf.append(end);
            }
            iToString = buf.toString();
        }
        return iToString;
    }


猜你喜欢

转载自blog.csdn.net/secret_breathe/article/details/80292034