2013-03-16 6 views
6

クラスのオブジェクトを作成し、最初のオブジェクトの場合は"b1"、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++; 
    } 

} 
+10

本当にその必要があるとは考えにくいので、なぜそれをしたいのか説明してください。 – assylias

+3

これがここで尋ねられるたびに四分の一を持っていたら... 1)変数名は==オブジェクト名ではなく、実際にはオブジェクト名に名前がなく、もっとオブジェクトに割り当てることができます1つの変数よりも2)実行中のプログラムにとって変数名は重要ではありませんが、デバッグが容易な人間が読めるコードを書くことが最も重要です。 3)すべてのインテントと目的のための変数名は、実行中のコードにも存在しません。4)**重要なものは、オブジェクトの参照*です。 –

答えて

9

いいえ、これはJavaで可能ではありません。実行時に変数を作成することはできません。ただし、String識別子を対応するBeingにマップするMapを維持することはできます。すなわち、私はそれ以上の従来の名前を想定している

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

注:Beingbeingとは対照的です。

+1

私は何か新しいことを学ばなくてはなりません:)ありがとう! – Syntic

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()); 
    } 
} 

(上記と同じ警告。)

1

これは、この方法では達成できません。変数の名前は、名前(ところで、Beingを命名しなければならない、としませbeing)あなたのクラスに属性を追加し、そのコンストラクタにMap<String,being>

Map<String,being> map = new HashMap<String,being>(); 
map.put("b1", new being()); 
2

のキーとして、あなたのための重要な店である場合:

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++; 
} 

。オブジェクトと変数を混同しないでください。

+0

これまでのところこれが最良の方法です。彼の質問に答えてください – Pragnani

3

"createbeing()"関数でクラスオブジェクトのローカル参照を作成するだけで、上記の宣言されたString "name"は、 "createbeing()クラス名のオブジェクトの参照として宣言しています。

関連する問題