問題があります: いくつかのインターフェイスを実装する2つのクラスがあります。クラスAではクラスBのオブジェクトのリストがあります。クラスAのオブジェクトのリストをクラスBのコンストラクタによって埋め込む方法
作成されるすべてのオブジェクトをハードコードする代わりに、クラスBのコンストラクタを使用してこれらのリストを生成する方法はありますか? クラスAでは、特定のクラスBオブジェクトを指定されたパラメータで検索するメソッドがありますが、問題は新しいオブジェクトが作成されるたびにこのリストを「オートポピュレートする」方法を見つけることです。
私はaddNodeToList()フォームクラスAを呼び出そうとしていましたが、このクラスのインスタンスでは実行できませんでした。
このリストを自動生成する方法はありますか?ここ
はコードです:CLASS
public class MyStructure implements IMyStructure {
private List<INode> nodes;
public MyStructure() {
}
@Override
public INode findByCode(String code) {
//impl
}
@Override
public INode findByRenderer(String renderer) {
//impl
}
@Override
public int count() {{
//impl
}
public void addNodeToList(INode node){
nodes.add(node);
}
}
クラスB
public class CompositeNode implements ICompositeNode {
private String code;
private String renderer;
MyStructure myStructure;
public static int counter;
public CompositeNode(String code, String renderer){
this.code= code;
this.renderer=renderer;
myStructure.addNodeToList(this);
counter++;
}
EDIT: 私は約クラスBの内部の静的リストを作成して考えていましたしかし、私はそれが良い習慣ではないと思う。 私はこれを効率的な方法で解決する方法が考えられていません。
は、完成: を私はこのようなクラスAの内部メソッドを作成しました:
public class MyStructure implements IMyStructure {
public void addNodeToList(String code, String renderer) {
CompositeNode node = new CompositeNode(code, renderer);
nodes.add(node);
}
それは私が望んでいたように動作します - 私は、クラスBの内部のリストを格納いけないし、それはリストを移入自己。私は単に、クラスAにゲッターを追加し、さらに、コンテキストおよび使用方法を知ることなく
それはノーですあなたが探しているものはすべてクリアされます。まず、あなたの "クラスA"は 'List'を持っていますが、 "クラスB"は 'ICodeName'ではなく' ICompositeNode'を実装しています。何もない(ICompositeNodeが 'INode'を拡張しているのかもしれない?)場合を除いて、' Class B 'オブジェクトを 'List 'に入れることはできません。次に、クラスBのコンストラクタには2つの文字列が必要です。クラスAがその文字列パラメータなしでクラスBオブジェクトを構築できるようにするには、引数を取らないクラスBのコンストラクタを用意する必要があります。 –
ajb
したがって、これら2つのクラスはどのようにして相互に接続されていますか? –
あなたの編集に反応する:それが効率的なら、あまりにも多くを得る方法はないと私は思います。クラスBの10項目のリストが必要な場合は、クラスBコンストラクタを10回コールする必要があります。 Javaには、10個のオブジェクトのスペースを一度に割り当てて初期化するという魔法の方法はないと思います。あなたはおそらくC++でこれを考案することができます。それはあなたが達成しようとしていたものですか? – ajb