如果将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
吗? 最佳答案
the language spec中的关键行是讨论方法引用的运行时评估的地方(重点是我的):
因此,之后是否更改目标引用的值都没有关系。