我想知道是否有更简单的方法来进行简单检查 - 我希望能够检查任何对象,并查看是否至少设置了其中一个属性(不等于null)。目前我可以使用反射来获得所有字段并逐个检查,但这非常慢。还有另一种方法吗?
我能想到的唯一(有点hacky)方式是创建一个新的Object,其中所有属性都应该初始化为null,并检查另一个对象是否等于它
非常感谢任何帮助!
答案 0 :(得分:6)
您可以编写一个界面NullCheckable
public interface NullCheckable {
boolean areAllPropertiesNull();
}
然后,您希望能够检查的每个类都使用适当的方法实现此接口,例如
public class Class1 implements NullCheckable {
private Object property1;
public Object getProperty1() {
return property1;
}
@Override
public boolean areAllPropertiesNull() {
return property1 == null;
}
}
答案 1 :(得分:2)
假设您希望此检查一般用于绝对任何对象 - 您是否拥有 - 我认为使用反射是实现此目的的唯一方法。 / p>
实际上,这种元编程检查正是反射的类型。
使用与新对象实例的比较仅在您可以保证所有对象(非原始)实例变量在构建后立即null
时才起作用(更新 - 并且覆盖.equals()
以比较每个字段),在一般情况下,您不能。
e.g。要运行检查的类可以定义一个初始化某些实例变量的无参数构造函数,或者某些实例变量可以在声明时内联初始化。
答案 2 :(得分:1)
对Joe Elleson方法的改进可能是提供一个抽象类
public abstract class NullChecker{
protected abstract Object[] getPropertiesToCheck();
protected boolean checkForNonNull(){
Object[] props=getPropertiesToCheck();
for(Object obj:props){
if(obj!=null){
return true;
}
}
}
然后扩展它并在每个类的方法实现中提供属性,如
public Object[] getPropertiesToCheck(){
return new Object[]{property1,property2,property3};
}