我真的厌倦了做所有 if null 检查,resp。我还希望有一个更可配置的场景。让我通过一个例子解释一下:
我有getter()
,在两种情况下都可以返回null
或'0'
。不应该通过setter()
来调用getter()
。
所以实现是
if(getter() != null && !getter().equals('0')) setter(getter());
然而,这真的让我很烦恼,特别是如果getter()
和setter()
是非常长的方法调用,我必须为此引入辅助变量。
我正在考虑使用参数
的方法ifNotSet(getter(), setter(), new Object[null, '0']);
完全相同的事情。 ifNotSet的参数是
setter(getter)
方式调用的方法getter()
的评估不得适用的条件谢谢!
更新
在你们的反馈之后,我一直在研究这个问题,并发现了以下内容
private boolean ns(Object[] condition, Object getter) {
boolean ret = false;
for (Object object : condition) {
if(getter) equals or == ??
}
return true;
}
Object[] cond = new Object[] { null, "0" };
Object a;
if (ns(cond, a = getter()))setter(a);
嗯,如果你有很多分配要做,这似乎至少是一个解决方案。但是,如果您查看ns()
方法...有关传入条件的问题是,是否使用==
或equals
进行比较!?
答案 0 :(得分:3)
你可以这样使用
public boolean checkNotNullOrZero(String s)
{
return (s!=null) && !s.equals("0");
}
基本用途:
if(checkNotNullOrZero(getter()))
{
setter(getter());
}
答案 1 :(得分:1)
你不能做那些在Java方法中不是一等公民的事情。你可以使用反射或匿名类,但这将是更多的工作。
如果null和0总是等同于getter
,那么可以将其更改为只返回其中一个吗?
如果null和0总是等同于setter
,那么可以将其更改为规范化这两个吗?
你能创建一个方法isNullOrZero(x)
然后你可以
if (!isNullOrZero(getter())) {
setter(getter());
}
答案 2 :(得分:1)
在Java中用字面意思做这个丑陋的方式:
public interface Getter {
public Object get();
}
public interface Caller {
public void call();
}
public void callIfNotNull(Getter getter, Caller caller, Object[] nullObjects) {
Object value = getter.get();
for(Object nullObject : nullObjects) {
if(value==nullObject) {
return;
}
}
caller.call();
}
用法:
callIfNotNull(new Getter() {
@Override
public Object get() {
return getterMethod();
}
}, new Caller() {
@Override
public void call() {
setter();
}
}, new Object[]{null, '0'});
}
您可能需要实现理智的方法来检查空对象并给出合理的名称。
Personnaly,我不会采用这种方法。我会尝试实施Null Object pattern来解决问题。