【问题标题】:Confused with Java8 lambda and auto generated constructor?对 Java8 lambda 和自动生成的构造函数感到困惑?
【发布时间】:2016-12-01 20:36:33
【问题描述】:
   @RequiredArgsConstructor
   class Foo {
        @NonNull private final UnaryOperator<String> myStr;
        @NonNull private final Runnable start, stop;

        public foo (UnaryOperator<String> myStr) {
            this(myStr, () -> {}, () -> {};
        }
    ..
    }

这条线是做什么的:

> this(myStr, () -> {}, () -> {});
> () -> {}

该类中没有其他构造函数。 我什至不明白如何阅读它。

【问题讨论】:

  • 必须有另一个带有foo(UnaryOperator&lt;String&gt; myStr, Runnable r1, Runnable r2) {...}签名的构造函数。
  • Btw 类在UpperCamelCase 中命名。
  • “我什至不明白如何阅读它”——该代码中有多个错误,好吧,我也不明白如何阅读……
  • 好吧,发布不完整的sn-ps就像有人会在中间结束

标签: java-8 lombok


【解决方案1】:

来自 Lombok 的 @RequiredArgsConstructor 注释会为您创建构造函数。

作为初学者,您应该避免使用 Lombok,因为其中涉及太多代码生成。

@RequiredArgsConstructor
class Foo {
    @NonNull private final UnaryOperator<String> myStr;
    @NonNull private final Runnable start, stop;

    public foo (UnaryOperator<String> myStr) {
        this(myStr, () -> {}, () -> {};
    }
    //...
}

将是:

class Foo {
    private final UnaryOperator<String> myStr;
    private final Runnable start, stop;

    public foo (UnaryOperator<String> myStr) {
        this(myStr, () -> {}, () -> {};
    }

    public foo (UnaryOperator<String> myStr, Runnable start, Runnable stop) {
        //Lombok generated checks from @NonNull
        if(myStr == null) throw new NullPointerException();
        if(start == null) throw new NullPointerException();
        if(stop == null) throw new NullPointerException();
        this.myStr = myStr;
        this.start = start;
        this.stop = stop;
    }
    //...
}

【讨论】:

  • 感谢 Flyn .. 和 () -> {} 实际上只是空方法。 ,这是另一件令人困惑的事情..我正在做项目,所以我必须使用/理解 Lombok。但是谢谢你!
  • @codemuncher 是的() -&gt; {} 等价于new Runnable() { public void run() {}}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 2021-06-12
  • 2015-01-22
相关资源
最近更新 更多