如果我们考虑任何泛型类型,例如,下面给出的代码取自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
包中的TypeElement
、ExecutableElement
、VariableElement
、AnnotationMirror
角色?
2)如何识别上述代码的javax.lang.model.type
包中的DeclaredType
、WildcardType
、ExecutableType
、MirrorType
角色?
3) AnnotationMirror
是否如本文所述为基于镜像的反射系统?
注:element
&type
包是元级设施,不同于传统的反射系统(Object.getClass()
方法或Type.class
文字)
*Type
和AnnotationMirror
类都是javax.lang.model.element
包的一部分,在构建自定义注释处理器时使用。它的基类是javax.annotation.processing.Processor
,这是一个开始寻找帮助的好地方。
本质上,所有这些类型都表示调用注释处理器的编译器的抽象语法树中的节点。它们是只读的,这意味着您只能添加自定义错误,但不能修改源代码。