0

你如何制作一个能够改变对象的每个参数的方法(只有 1 个)?您一次只能选择一个参数。

嗯,我的想法是这样的。我有一个对象,有 3 个变量(例如, object(first,second,third) ),我想更改对象的第一个参数,第二个和第三个...

好的,我知道如何制作一次更改一个参数的方法(但是如果我想制作一个要求所有 3 个参数的方法,我需要制作 3 个或 4 个方法。)ec,但是有没有办法只做一种方法,可以为每个参数做这一切吗?例如...

 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)

你可以只用一种方法完成这一切。我真的不知道如何解释得很好。

4

2 回答 2

2

您可以使用反射来获取成员的实例,但这既繁重又缓慢。我更喜欢一个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 回答