Во-первых, неясно, что вы хотите, чтобы ваш метод getNonNullValue
возвращал, когда foo.getX()
возвращает null
.Предполагая, что вы захотите, чтобы он возвратил null
, вы можете просто сделать это:
public <T, R> R getNonNullValue(final T t, final Supplier<R> supplier) {
return t != null ? supplier.get() : null;
}
Однако вы можете вызывать его только так, как пытаетесь, если getY
является static
методомв классе X
:
// For this to work, X.getY() must be static
Y y = getNonNullValue(foo.getX(), X::getY);
Это, вероятно, не то, что вы хотите;Я думаю, что вы хотите вызвать не-static
getY
метод для объекта, который возвращает foo.getX()
.Если это так, то вам следует позвонить getNonNullValue
следующим образом:
Y y = getNonNullValue(foo.getX(), foo.getX()::getY);
Я сомневаюсь, что это делает ваш код более понятным и лаконичным, чем просто написать следующее:
Y y = foo.getX() != null ? foo.getX().getY() : null;
К сожалению, в Java нет нуль-безопасного оператора разыменования, как в ряде других языков программирования, что сделало бы это более кратким и понятным.