0

オブジェクトのすべてのパラメーターを変更できるメソッド (1 つだけ) を作成するにはどうすればよいですか? また、一度に選択できるパラメーターは 1 つだけです。

さて、私の考えはこれです。3 つの変数 (たとえば、 object(first,second, third) ) を持つオブジェクトを取得し、オブジェクトの最初のパラメーター、2 番目と 3 番目のパラメーターを変更したい...

わかりました、一度に 1 つのパラメーターを変更するメソッドの作成方法は知っています (ただし、3 つのパラメーターすべてを要求するメソッドを作成する場合は、3 つまたは 4 つのメソッドを作成する必要があります)。すべてのパラメーターに対してすべてを実行できるメソッドを 1 つだけ作成しますか? 例えば...

 double count(object.)  /*After the point you can input which 
 parameter you want to change. Method asks only for 1 object parameter,
 but you can use this method for every parameter of the object. */
    {
      return object. +19;
    }

メソッドを呼び出したいときは、このようなことができます

 count(object.first)
 count(object.second)

たった 1 つの方法ですべてを実行できます。どう説明したらいいのか、本当によくわかりません。

4

2 に答える 2

2

リフレクションを使用して Member のインスタンスを取得できますが、これは重くて遅いです。私はHashMap<String, AtomicInteger>

public class MultiCounter {
    private Map<String, AtomicInteger> counters = new HashMap<>();
    public synchronized int count(String name) {
        AtomicInteger c = counters.get(name);
        if (c==null) {
            c = new AtomicInteger(0);
            counters.put(name, c);
        }
        return c.incrementAndGet();
    }
}

もう少し洗練されているので、 key の列挙型を定義することもできます:

enum Key {
    first,
    second
}

private Map<Key, AtomicInteger> counters = new EnumMap<Key, AtomicInteger>(Key.class);
public synchronized int count(Key key) {
    AtomicInteger c = counters.get(key);
    if (c==null) {
        c = new AtomicInteger(0);
        counters.put(key, c);
    }
    return c.incrementAndGet();
}

これにより、

 int count = myCounter.count(Key.first);
于 2012-11-13T14:26:17.163 に答える
0

これらのパラメーターがオブジェクトであり、int や double などのプリミティブ型ではない場合は、それらをメソッドに渡し、属性の値を変更してそのままにしておくことができます (何も返す必要はありません)。呼び出しメソッドはこれらの変更に対応できるようになります。パラメータは値で渡されます (つまり、渡すオブジェクトがコピーされ、メソッドが新しいコピーで動作することを意味します) が、それらの属性は引き続きメモリ内の同じ領域にリンクされます (つまり、オブジェクトの属性が同じであることを意味します)。オブジェクトのコピーの属性としてメモリを参照します)。

public void testMethod() throws Exception {
        MyObject param1 = new MyObject();
        MyObject param2 = new MyObject();
        MyObject param3 = new MyObject();

        setCountUp(param1, param2, param3);

        System.out.println(param1.getCount());
        System.out.println(param2.getCount());
        System.out.println(param3.getCount());
    }

    private void setCountUp(MyObject param1, MyObject param2, MyObject param3) {
        param1.setCount(param1.getCount() + 1);
        param2.setCount(param2.getCount() + 2);
        param3.setCount(param3.getCount() + 3);
    }

    private static class MyObject {
        private long count = 1;

        public void setCount(long count) {
            this.count = count;
        }

        public long getCount() {
            return count;
        }
    }

結果は次のようになります: 2 3 4

于 2012-11-13T14:32:53.023 に答える