有人可以帮我提供通用的优化代码来测试null对象吗?我基本上寻找的是一个方法,可以将任何对象作为输入,也可以是路径并返回一个布尔值,指定目标对象是否为空。
这样的事情:
public boolean isNull(Object Obj, String Path){
// ...
}
路径类似于:A.getB()。getC()。 。 。
所以A作为对象传递,isNull
方法首先调用getB()
检查返回的对象是否null
然后调用getC()
等等。
答案 0 :(得分:2)
有一些策略可用于测试 null 对象。
您可以使用Guava libraries来检查引用是否 null 或不使用Preconditions API。
检查文档中的 null 检查:http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/base/Preconditions.html#checkNotNull(T)
Guava Github页面上有一个有趣的article,解释了如何避免 null 。
如果您使用的是Java 8,则可以使用Optional类型来避免始终测试 null 引用。
答案 1 :(得分:2)
评论中有很多内容可以强调可用于避免null
检查的技术。
如果你真的需要写一些东西来进行null
检查,你可以构建一个小对象图,使用Function
来遍历被检查的图形,如下所示:
public class NullCheck<T>
{
private T root;
public NullCheck(T root)
{
this.root = root;
}
public <C> NullCheck<C> with(Function<T, C> getter)
{
return root != null ? new NullCheck<>(getter.apply(root)) : new NullCheck<>(null);
}
public boolean isNull()
{
return root == null;
}
public boolean isNotNull()
{
return root != null;
}
}
如果某个Person
的{{1}}具有属性Address
,那么您可以使用zipCode
来编写如下代码:
NullCheck
答案 2 :(得分:0)
当您准备对象时,可以将@NotNull注释放到您拥有的参数中,因此当您获取它时,除了null之外还有其他东西(如果您使用的是Java EE 6及更高版本)。对于使用您正在获取的对象执行某些操作,此方法可能非常快...当您将null作为输入传递时,您将获得异常,处理异常需要比简单的null检查更多的资源和时间。
如果你想编写自己的方法而不使用上面提到的东西,你可以使用这样的东西(如果不需要例外,你可以把它留下来):
private static final String NE_MESSAGE = "Object is null...";
private static final String NULL_LOG = "Value is null, param name: ";
public static boolean isNull(Strin name, Object... object) {
for(Object o : object) {
if ( o == null) {
NullException ne = new NullException(NULL_MESSAGE);
LOGGER.error(NULL_LOG + name);
throw ne;
}
}
return Boolean.FALSE;
}