了解"不可修改集合"中'Element'和'TypeMirror'的角色



如果我们考虑任何泛型类型,例如,下面给出的代码取自java.util.Collections

static class UnmodifiableCollection<E> implements Collection<E>, Serializable {
        private static final long serialVersionUID = 1820017752578914078L;
        final Collection<? extends E> c;
        UnmodifiableCollection(Collection<? extends E> c) {
            if (c==null)
                throw new NullPointerException();
            this.c = c;
        }
        public int size()                   {return c.size();}
        public boolean isEmpty()            {return c.isEmpty();}
        public boolean contains(Object o)   {return c.contains(o);}
        public Object[] toArray()           {return c.toArray();}
        public <T> T[] toArray(T[] a)       {return c.toArray(a);}
        public String toString()            {return c.toString();}
        public Iterator<E> iterator() {
           ...
        }
        public boolean add(E e) {
            throw new UnsupportedOperationException();
        }
        public boolean remove(Object o) {
            throw new UnsupportedOperationException();
        }
        public boolean containsAll(Collection<?> coll) {
            return c.containsAll(coll);
        }
        public boolean addAll(Collection<? extends E> coll) {
            throw new UnsupportedOperationException();
        }
        public boolean removeAll(Collection<?> coll) {
            throw new UnsupportedOperationException();
        }
        public boolean retainAll(Collection<?> coll) {
            throw new UnsupportedOperationException();
        }
        public void clear() {
            throw new UnsupportedOperationException();
        }
        @Override
        public boolean removeIf(Predicate<? super E> filter) {
             throw new UnsupportedOperationException();
        } 
    }

我想了解,

1)如何识别上述代码的javax.lang.model.element包中的TypeElementExecutableElementVariableElementAnnotationMirror角色?

2)如何识别上述代码的javax.lang.model.type包中的DeclaredTypeWildcardTypeExecutableTypeMirrorType角色?

3) AnnotationMirror是否如本文所述为基于镜像的反射系统?

注:element &type包是元级设施,不同于传统的反射系统(Object.getClass()方法或Type.class文字)

*TypeAnnotationMirror类都是javax.lang.model.element包的一部分,在构建自定义注释处理器时使用。它的基类是javax.annotation.processing.Processor,这是一个开始寻找帮助的好地方。

本质上,所有这些类型都表示调用注释处理器的编译器的抽象语法树中的节点。它们是只读的,这意味着您只能添加自定义错误,但不能修改源代码。

相关内容

  • 没有找到相关文章

最新更新