从对象中获取非null值



假设我有一个类Foo,它有X,X有Y。我只想在foo.getX()不是null的情况下从X得到Y,否则null如下所示:

Y y = getNonNullValue(foo.getX(), X::getY);

所以我不必做:

if (foo.getX() != null) {
Y y = foo.getX().getY();
}

我有以下代码

public <T, R> R getNonNullValue(final T t, final Supplier<R> supplier) {
return ; // What to write here?
}

commons-lang或任何其他库是否具有类似的功能?

我不理解你的问题,但我认为你需要这个:

public <T, R> R getNonNullValue(final T t, final Function<T, R> mapper) {
return Optional.ofNullable(t)
.map(mapper)
.orElse(null);
}

或者按照jesper的建议:

public <T, R> R getNonNullValue(final T t, final Supplier<R> supplier) {
return t != null ? supplier.get() : null;
}

首先,当foo.getX()返回null时,不清楚您希望方法getNonNullValue返回什么。假设您希望它返回null,那么您可以简单地执行以下操作:

public <T, R> R getNonNullValue(final T t, final Supplier<R> supplier) {
return t != null ? supplier.get() : null;
}

但是,如果getYX:类中的static方法,则只能像您尝试的那样调用它

// For this to work, X.getY() must be static
Y y = getNonNullValue(foo.getX(), X::getY);

这可能不是你想要的;我认为您想对foo.getX()返回的对象调用非staticgetY方法。如果是这样的话,那么你应该这样调用getNonNullValue

Y y = getNonNullValue(foo.getX(), foo.getX()::getY);

我怀疑这是否会使您的代码比直接写以下内容更清晰简洁:

Y y = foo.getX() != null ? foo.getX().getY() : null;

不幸的是,Java不像许多其他编程语言那样有一个空安全的去引用运算符,这将使它更加简洁明了。

相关内容

  • 没有找到相关文章