1

好的,我的问题并不是一个严重的问题,我只是想找到一种访问/修改类成员变量的聪明方法。这是代码:

public class Storage{
 private int cookies= 0; 
 private int rolls= 0; 
 private int candies= 0; 
 private int lolipops= 0; 
 private int iceCreams= 0; 

 public void addCookies(int howMuch){  //this is the dirty way of creating method for
    this.cookies = cookies+howMuch;     //every member variable    
 }

 public void addValue(String stat, int howMuch){ //i would like to do it only
                                       //by passing the name
                                      //of variable and then cast it as integer
                                      //so that it would relate to my class members

    int value = this.(Integer.parseInt(stat));   //  <- YES i know its ridiculous
                                      //im just trying to explain what is my aim       
    value = value + howMuch;

    this.(Integer.parseInt(stat)) = value;
 }
}

通常我想通过将其名称传递给方法来访问字段,读取该成员的值,添加一些值,然后存储它。是的,我知道它可以很容易地使用单独的方法来完成,甚至可以通过使用一些数组列表和成员名称与传递给方法的参数的比较来完成。但我想“快速”地做到这一点,而无需编写多余的代码。

现在我有 5 个成员,但是 15000 呢?我的目标是简化整个处理和代码编写。那么一般是否有可能做这种冗余代码编写绕过?因为我知道我总是将适当的名称传递给方法......除非经验法则是为每个变量创建方法?

4

3 回答 3

3

通常你会使用像地图这样的集合。

public class Storage{
    private final Map<String, Integer> inventory = ...

    public void addCount(String key, int count) {
        Integer i = inventory.get(key);
        if (i == null) i = 0;
        inventory.put(key, i + count);
    }
于 2012-05-06T07:08:18.640 回答
2

我想通过使用反射,您可以遍历对象的字段/方法并进行计算。

对于一个特定领域:

    Field member = myObject.getClass().getField(fieldName);
    // If you know the class: Field member = MyClass.class.getField(fieldName);
    System.out.println(member.getInt(myObject)); // Get the value
            member.setInt(myObject, 4); // Set the value

如果你想为所有公共成员做点什么:

    for(Field member: myObject.getClass().getFields())
        // Or you can do: for(Field member: myClass.class.getFields())
    {
        member.getInt(myObject)); // Get the value
        member.setInt(myObject, 4); // Set the value
    }

基本上,您所做的是找到代表对象成员的 Field 对象,然后您可以对其进行操作。

于 2012-05-06T07:29:07.710 回答
1

大多数 IDE 会为您生成 setter 和 getter。这将不费吹灰之力地做你想做的事。如果这还不够,请编写一个使用反射来设置值的方法。

如果您有一个有 15000 个成员的类,并且我假设您的意思是类私有的变量,那么您还有其他问题需要解决。

于 2012-05-06T07:05:02.790 回答