以 netty 的 AbstractBootstrap 为例

 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
    // 1. 父类中定义一个继承自己的范型 B. B extends AbstractBootstrap<B>
    public abstract class AbstractBootstrap<B extends AbstractBootstrap<B>>{
        ...
        public B method1() {
            return self();
        }
        public B method2() {
            return self();
        }
        private B self() {
            return (B) this;
        }
    }

    // 2. 子类中将自己作为范型
    public class ServerBootstrap extends AbstractBootstrap<ServerBootstrap> {
        ...
    }

    public static void main(String[] args) {
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        // 3. 调用时就可以起到链式调用的效果
        serverBootstrap.method1()
                       .method2();
    }