gpt4 book ai didi

java - 在 java 8::method 引用中使用空对象的实例方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:15:39 27 4
gpt4 key购买 nike

如果我们将 Object 实例设置为 null,为什么在方法引用 (::) 中使用实例方法时不会抛出 NullPointerException

  public class MethodReferenceTest {

public static void main(String...strings){

PredicateSample predicateSample = new PredicateSample();
Predicate<String> predicate = predicateSample::isNotEmpty;
// NullpointerException ???
predicateSample = null;
Arrays.asList("a","b","c",null)
.stream()
.filter(predicate)
.forEach(System.out::println);
}

static class PredicateSample{
public boolean isNotEmpty(String s){
return ((s!=null) && (!s.isEmpty()));
}
}
}

好像predicateSample在构造Predicate后没有被调用?

最佳答案

the language spec中的关键行是讨论方法引用的运行时评估的地方(强调我的):

  • If the form is ExpressionName :: [TypeArguments] Identifier or Primary :: [TypeArguments] Identifier ...

    • ....
    • The target reference is the value of ExpressionName or Primary, as determined when the method reference expression was evaluated.

因此,之后是否更改目标引用的值并不重要。

关于java - 在 java 8::method 引用中使用空对象的实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46564377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com