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

通常、Map のようなコレクションを使用します。

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

リフレクションを使用することで、オブジェクトのフィールド/メソッドを反復処理して計算を行うことができると思います。

1 つの特定のフィールドの場合:

    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は、セッターとゲッターを生成します。これにより、煩わしさや労力をかけずに、やりたいことができます。これが不十分な場合は、リフレクションを使用して値を設定するメソッドを記述してください。

15000のメンバーを持つクラスがあり、これによってクラスにプライベートな変数を意味すると仮定すると、解決すべき他の問題があります。

于 2012-05-06T07:05:02.790 に答える