Lombok的注解@Delegate使用demo

10/31/2023 javaLombok

@Delegate注解可以用于生成委托方法,将指定对象的方法委托给当前类。下面是一个使用@Delegate注解的示例:

import lombok.experimental.Delegate;

public class Printer implements Printable {
    @Delegate private final Printable delegate;
    
    public Printer(Printable delegate) {
        this.delegate = delegate;
    }
    
    @Override
    public void print(String message) {
        System.out.println("Before printing");
        delegate.print(message);
        System.out.println("After printing");
    }
    
    public static void main(String[] args) {
        Printable printer = new Printer(new ConsolePrinter());
        printer.print("Hello, World!");
    }
}

interface Printable {
    void print(String message);
}

class ConsolePrinter implements Printable {
    @Override
    public void print(String message) {
        System.out.println("Printing: " + message);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

在上面的例子中,我们定义了一个Printer类实现Printable接口,并使用@Delegate注解将Printable接口的方法委托给delegate字段。通过这样的方式,Printer类会自动继承Printable接口的方法,并将其转发给delegate对象进行实际的处理。

在Printer类的print()方法中,我们可以在调用委托方法前后添加额外的逻辑,以实现对打印操作的控制。在main()方法中,我们创建了一个Printer对象,并调用print()方法,实际上会执行ConsolePrinter对象的print()方法。

通过@Delegate注解,我们可以方便地实现代码复用和委托模式,避免重复编写相似的委托方法。