1

我真的厌倦了做所有的if null检查,resp。我还想为此提供一个更可配置的场景。让我通过一个例子来解释这一点:

我有一个getter()可能返回null'0'在两种情况下都返回的resp。setter()不应该被称为通过getter()

所以实现是

if(getter() != null && !getter().equals('0')) setter(getter()); 

然而,这真的让我很烦恼,特别是如果getter()并且setter()是非常长的方法调用,我必须为此引入辅助变量。

我正在考虑一种带参数的方法

ifNotSet(getter(), setter(), new Object[null, '0']); 

它做同样的事情。ifNotSet 的参数在哪里

  • getter - 检查它是否不等于 条件之一的方法
  • settersetter(getter) -如果条件不适用则调用的方法
  • conditionsgetter() -对于要执行的方法,不得应用于评估的条件

乍一看,这似乎并不复杂,但它确实如此!有人知道这个问题的解决方案或任何类型的实现吗?

谢谢!

更新

在你们的反馈之后,我一直在研究这个问题,并发现了以下内容

    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进行比较!?

4

3 回答 3

3

你可以使用这种方式

  public boolean checkNotNullOrZero(String s)
    {
    return (s!=null) && !s.equals("0");
    }

基本用途:

if(checkNotNullOrZero(getter()))
{
setter(getter());
}
于 2013-02-27T09:22:38.840 回答
1

你不能这样做,因为 Java 方法不是一等公民。您可以使用反射或匿名类,但这将是更多的工作。

如果 null 和 zero 总是等价的,getter那么是否可以将其更改为仅返回两者之一?

如果 null 和 zero 总是等价的,setter那么是否可以将其更改为将两者归一化?

你能创建一个方法isNullOrZero(x)然后你就可以拥有

if (!isNullOrZero(getter())) {
  setter(getter());
}
于 2013-02-27T09:20:50.180 回答
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'});
    }

您可能需要实施健全的方法来检查空对象并给出合理的名称。

就个人而言,我不会采用这种方法。我会尝试实现空对象模式来解决问题。

于 2013-02-27T09:30:00.017 回答