作用于容器变量,为该变量生成一堆常用的方法,这些方法都是容器中的方法
二、属性介绍(非必选)- types:指定代理方法的类、值为 类名.class
- excludes:排除指定类,和 types 相反
public class 李沁 {
@Delegate
private List list = new ArrayList();
public static void main(String[] args) {
李沁 l = new 李沁();
l.add("李沁");
}
}
编译后
public class 李沁 {
private List list;
public 李沁() {
this.list = new ArrayList();
}
public static void main(String[] args) {
李沁 l = new 李沁();
l.add("李沁");
System.out.println(l);
}
public int size() {return this.list.size();}
public boolean isEmpty() {return this.list.isEmpty();}
public boolean contains(Object arg0) {return this.list.contains(arg0);}
public Iterator iterator() {return this.list.iterator();}
public Object[] toArray() {return this.list.toArray();}
public T[] toArray(T[] arg0) {return this.list.toArray(arg0);}
public boolean add(String arg0) {return this.list.add(arg0);}
public boolean remove(Object arg0) {return this.list.remove(arg0);}
public boolean containsAll(Collection> arg0) {return this.list.containsAll(arg0);}
public boolean addAll(Collection extends String> arg0) {return this.list.addAll(arg0);}
public boolean addAll(int arg0, Collection extends String> arg1) {return this.list.addAll(arg0, arg1);}
public boolean removeAll(Collection> arg0) {return this.list.removeAll(arg0);}
public boolean retainAll(Collection> arg0) {return this.list.retainAll(arg0);}
public void replaceAll(UnaryOperator arg0) {this.list.replaceAll(arg0);}
public void sort(Comparator super String> arg0) {this.list.sort(arg0);}
public void clear() {this.list.clear();}
public String get(int arg0) {return ((String)this.list.get(arg0));}
public String set(int arg0, String arg1) {return ((String)this.list.set(arg0, arg1));}
public void add(int arg0, String arg1) {this.list.add(arg0, arg1);}
public String remove(int arg0) {return ((String)this.list.remove(arg0));}
public int indexOf(Object arg0) {return this.list.indexOf(arg0);}
public int lastIndexOf(Object arg0) {return this.list.lastIndexOf(arg0);}
public ListIterator listIterator() {return this.list.listIterator();}
public ListIterator listIterator(int arg0) {return this.list.listIterator(arg0);}
public List subList(int arg0, int arg1) {return this.list.subList(arg0, arg1);}
public Spliterator spliterator() {return this.list.spliterator();}
public boolean removeIf(Predicate super String> arg0) {return this.list.removeIf(arg0);}
public Stream stream() {return this.list.stream();}
public Stream parallelStream() {return this.list.parallelStream();}
public void forEach(Consumer super String> arg0) {this.list.forEach(arg0);}
}
属性拓展
public class 李沁 {
private interface 乔欣 {
boolean add(String name);
}
@Delegate(excludes = {乔欣.class})
private List list = new ArrayList();
public static Integer i = 0;
public static void main(String[] args) {
李沁 l = new 李沁();
l.add("李沁");
System.out.println(l);
System.out.println(i);
}
private boolean add(String name) {
i++;
return false;
}
}
public class 李沁 {
private interface 乔欣 {
boolean add(String name);
}
@Delegate(types = {乔欣.class})
private List list = new ArrayList();
public static void main(String[] args) {
李沁 l = new 李沁();
l.add("李沁");
}
}
四、温馨提示
一个类中只能使用一个 @Delegate 注解,因为使用多个会生成多个 size() 方法,从而会导致编译报错
我们可以手写覆盖 @Delegate 注解所生成的容器常用方法,但是返回类型必须和原方法相同,参数类型必须和容器的泛型相同



