最全的 lombok 注解详情(随着版本不定时更新)
一、注解介绍
作用于容器变量,为该变量生成一堆常用的方法,这些方法都是容器中的方法
二、属性介绍(非必选)
- types:指定代理方法的类、值为 类名.class
- excludes:排除指定类,和 types 相反
三、实战演练
public class 李沁 {
@Delegate
private List<String> list = new ArrayList<String>();
public static void main(String[] args) {
李沁 l = new 李沁();
l.add("李沁");
}
}
编译后
public class 李沁 {
private List<String> 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<String> iterator() {
return this.list.iterator();}
public Object[] toArray() {
return this.list.toArray();}
public <T> 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<String> 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<String> listIterator() {
return this.list.listIterator();}
public ListIterator<String> listIterator(int arg0) {
return this.list.listIterator(arg0);}
public List<String> subList(int arg0, int arg1) {
return this.list.subList(arg0, arg1);}
public Spliterator<String> spliterator() {
return this.list.spliterator();}
public boolean removeIf(Predicate<? super String> arg0) {
return this.list.removeIf(arg0);}
public Stream<String> stream() {
return this.list.stream();}
public Stream<String> 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<String> list = new ArrayList<String>();
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<String> list = new ArrayList<String>();
public static void main(String[] args) {
李沁 l = new 李沁();
l.add("李沁");
}
}
四、温馨提示
一个类中只能使用一个 @Delegate 注解,因为使用多个会生成多个 size() 方法,从而会导致编译报错
我们可以手写覆盖 @Delegate 注解所生成的容器常用方法,但是返回类型必须和原方法相同,参数类型必须和容器的泛型相同