lombok 实验性注解之 @Delegate

最全的 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 注解所生成的容器常用方法,但是返回类型必须和原方法相同,参数类型必须和容器的泛型相同

猜你喜欢

转载自blog.csdn.net/qq_39249094/article/details/121357966