6

"b1"クラスbeingのオブジェクトを作成し、最初のオブジェクト、 2番目のオブジェクトなどに自動的に名前を付けるメソッドが必要です"b2"String新しいオブジェクトの名前としてを使用できますか?可能であれば、どうすればよいですか?

class being {
    static int count = 0;
    String name;

    void createbeing(){
        name = "b" + Integer.toString(count);
        being name = new being(); //Here I want to insert the String name as the name of the object
        count++;
    }

}
4

5 に答える 5

9

いいえ、これはJavaでは不可能です。実行時に変数を作成することはできません。ただし、識別子を対応するsieにMapマップするを維持することはできます。StringBeing

Map<String, Being> map = new HashMap<String, Being>();
...
name = "b" + Integer.toString(count);
map.put(name, new Being());
count++;

Beingとは対照的に、私はより一般的な名前を想定していることに注意してくださいbeing

于 2013-03-16T13:26:26.140 に答える
3

コードでは、関数「createbeing()」でクラスオブジェクトのローカル参照を作成しているだけで、上記で宣言された文字列「name」は、参照「name」によって「createbeing()」関数スコープに隠されています。クラスbeingのオブジェクトの参照として宣言しています。

于 2013-03-16T13:50:49.127 に答える
2

オブジェクトの名前として文字列を使用できますか?

いいえ。これを行う通常の方法は、List実装の1つを使用して、それにオブジェクトを追加することです。例:

class being{
    static List<being> beings = new LinkedList<being>();

    void createbeing(){
        beings.add(new being());
    }
}

(私は存在の静的リストを使用することを推奨していません。あなたが解決しようとしているより大きな問題へのより良いアプローチはほぼ確実にあります。しかし、それはあなたが提示したコードへの最小限の変更でした。)

または、を使用してMap、実際に必要な名前を取得することもできます("b1"など)。

class being{
    static int count = 0;
    static Map<String,being> beings = new HashMap<String,being>();

    void createbeing(){
        count++;
        beings.add("b" + count, new being());
    }
}

(上記と同じ注意事項。)

于 2013-03-16T13:25:51.183 に答える
2

名前属性をクラス(名前Beingは、BTWであり、ではないbeing)とそのコンストラクターに追加します。

public class Being
    private String name;

    public Being(String name) {
        this.name = name;
    }
}

次に、オブジェクトを作成します。

void createBeing(){
    name = "b" + Integer.toString(count);
    Being being = new Being(name);
    // TODO: do something with the Being object
    count++;
}

これが、オブジェクトに名前を付ける方法です。オブジェクトと変数を混同しないでください。

于 2013-03-16T13:28:50.833 に答える
1

これはこの方法では達成できません。変数の名前が重要な場合は、のキーとして保存しますMap<String,being>

Map<String,being> map = new HashMap<String,being>();
map.put("b1", new being());
于 2013-03-16T13:28:19.540 に答える