- PR -

インスタンスの動的生成について

投稿者投稿内容
海豹711
会議室デビュー日: 2004/09/10
投稿数: 9
投稿日時: 2004-09-10 23:00
引用:

aaさんの書き込み (2004-09-10 22:17) より:
add("打ち込んだ名前", new A());


なるほど!
と思ったんですがコレだとインスタンスの参照名は何になっているのでしょうか?
それともコレで「打ち込んだ名前」が参照名になっているのでしょうか?
addとなっていますがputと違うのですか?質問ばかりですみません…
きりん
会議室デビュー日: 2004/08/17
投稿数: 16
投稿日時: 2004-09-11 10:51
検討違いだったらすみません。

map.put("a",new A());
map.put("b",new A());

のようにしてmapに追加して、インスタンスを使いたい時だけ

A b=(A)map.get("b");

のように生成する使い方ではだめなのでしょうか。

Odakaz
ベテラン
会議室デビュー日: 2004/05/24
投稿数: 70
投稿日時: 2004-09-11 13:32
引用:

海豹711さんの書き込み (2004-09-10 22:12) より:
打ち込んだ名前をキーとした場合、放り込む値は
クラスのインスタンス(オブジェクト?)になると言う事でしょうか?
それだと事前にインスタンスを作成する必要があるような…?


目指されている事がいまひとつ理解できてないのですが、『オブジェクトを(名前が入力されるたびに)動的に生成してあとで名前で引っ張ってきたい』ということかなぁと思って、Mapに放り込む云々の書き込みをしました。
もしそれでいいのであれば、aaさんの書き込み通りでいいと思います。

ただその場合、同じ名前を入力されたらどうするかとか、仕様を決める必要はあると思いますが。

あと、Mapなどの動作が知りたければ、J2SEのAPIドキュメント見たほうが手っ取り早いですよ。

[ メッセージ編集済み 編集者: Odakaz 編集日時 2004-09-11 13:38 ]
海豹711
会議室デビュー日: 2004/09/10
投稿数: 9
投稿日時: 2004-09-11 13:42
確かにデータだけ格納しておいて必要な時にだけ作ればいいですね。盲点でした(;^_^A
で、以下の様に作ってみたのですが結果が何か変ですね…
コレでしっかりと入っているのでしょうか?


class A{
String name;
int ID;

A(String name,int ID){
this.name= name;
this.ID= ID;
}
}

static int count_id = 0;//データ個数カウント
Object[] mss = {"What is class name ?"};
count_id++;
String classname = JOptionPane.showInputDialog(panel,mss);
map.put(classname,new A(classname,count_id));
A b = (A)map.get(classname);
System.out.println(b.name + b.ID);
System.out.println("--------------------------------");
System.out.println(map);
System.out.println("-------------------------------");

<結果>
siro1
--------------------------------
{siro=Test$A@3cc262}
-------------------------------
ron2
--------------------------------
{ron=Test$A@1be16f5}
-------------------------------
kozima3
--------------------------------
{kozima=Aest$A@11c2b67}
-------------------------------

入れたデータを上書きしてしまっているのでしょうか?
それともそもそもデータの表示方法が違うのでしょうか?
海豹711
会議室デビュー日: 2004/09/10
投稿数: 9
投稿日時: 2004-09-11 14:13
引用:

Odakazさんの書き込み (2004-09-11 13:32) より:
『オブジェクトを(名前が入力されるたびに)動的に生成してあとで名前で引っ張ってきたい』ということかなぁと思って、Mapに放り込む云々の書き込みをしました。
もしそれでいいのであれば、aaさんの書き込み通りでいいと思います。


返信ありがとうございますm(_ _)m
イメージ的には上記の様な感じです。Mapはキー1つにつき値を1つ保存するみたいな
事が書いてあった為、値をclassの形にして多くのデータを保存しようと考えました。
保存したデータを変える時にインスタンスを生成し変更後また投げ込めばいいかなぁと思ったんですが…(;^_^

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-12 12:24
以下の部分のコードはいったいどこに書いてあるのですか?
mapオブジェクトはどこで生成しているのですか?

省略するのはいいですが、せめて必要な情報がわかる程度にしてください。
引用:

static int count_id = 0;//データ個数カウント
Object[] mss = {"What is class name ?"};
count_id++;
String classname = JOptionPane.showInputDialog(panel,mss);
map.put(classname,new A(classname,count_id));
A b = (A)map.get(classname);
System.out.println(b.name + b.ID);
System.out.println("--------------------------------");
System.out.println(map);
System.out.println("-------------------------------");


海豹711
会議室デビュー日: 2004/09/10
投稿数: 9
投稿日時: 2004-09-12 12:52
省略し過ぎましたね…すみません。以下が試行中のコードです。

class A{
String name;
int ID;

A(String name,int ID){
this.name= name;
this.ID= ID;
}
}
public class Test {

public static void main(String[] args) {
int count_id = 0;
JPanel panel = new JPanel();
Map a = new TreeMap();
Object[] mss = {"What is class name ?"};
String classname = JOptionPane.showInputDialog(panel,mss);
map.put(classname,new A(classname,count_id));
A b = (A)map.get(classname);
System.out.println(b.name + b.ID);
System.out.println("--------------------------------");
System.out.println(map);
System.out.println("-------------------------------");

}

<結果>
siro0
--------------------------------
{siro=Test@17e121c}
-------------------------------

count_idはのちのちstaticで宣言して個数をカウントする為に用いて
上記のコードはpaintメソッドをオーバーライドして何個も追加できる
仕様にするつもりです。上手くMapに入っていないみたいですが何が
いけないのでしょうか?
海豹711
会議室デビュー日: 2004/09/10
投稿数: 9
投稿日時: 2004-09-12 12:57
引用:

a.put(classname,new A(classname,count_id));
A b = (A)a.get(classname);
System.out.println(a);


修正します。Mapの参照名はaです。

スキルアップ/キャリアアップ(JOB@IT)