1

nullチェックの場合はすべて実行するのに本当にうんざりしています。また、このためのより構成可能なシナリオが必要です。これを例で説明しましょう:

私はgetter()戻るかもしれないnull'0'、どちらの場合もそれぞれを持っています。setter()を渡すと呼ばれるべきではありませんgetter()

したがって、実装は

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

ただし、これは本当に私を苛立たせます。特に、getter()メソッドsetter()呼び出しが非常に長く、このためのヘルパー変数を導入する必要がある場合はなおさらです。

パラメータ付きのメソッドを考えています

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

これはまったく同じことをします。ifNotSetのパラメータはどこにありますか

  • getter-条件の1つと等しくないかどうかをチェックするメソッド
  • setter-条件が適用されない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比較するかです!?

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とゼロが常に同等である場合getter、2つのうちの1つだけを返すように変更できますか?

nullとゼロが常に同等である場合setter、2つを正規化するためにそれを変更できますか?

メソッドを作成して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'});
    }

null オブジェクトをチェックして妥当な名前を付けるには、適切な方法を実装する必要があるかもしれません。

個人的には、私はこのアプローチを採用しません。問題を解決するためにNull Object パターンを実装しようとします。

于 2013-02-27T09:30:00.017 に答える