こんばんは、
コンテナークラスBoxに包含クラスの が含まれるように、一連の Java クラスを開発しています。Aは、他の との関係を指定できる必要があります。これを行う良い方法は、次のようにすることだと思いました。ListWidgetWidgetWidgets
public abstract class Widget {
public static class WidgetID {
// implementation stolen from Google's GWT
private static int nextHashCode;
private final int index;
public WidgetID() {
index = ++nextHashCode;
}
public final int hashCode() {
return index;
}
}
public abstract WidgetID getWidgetID();
}
のサブクラスは次のようになりWidgetます。
public class BlueWidget extends Widget {
public static final WidgetID WIDGETID = new WidgetID();
@Override
public WidgetID getWidgetID() {
return WIDGETID;
}
}
これで、BlueWidgetが実行できgetBox().addWidgetRelationship(RelationshipTypes.SomeType, RedWidget.WIDGETID、Box2 番目のパラメーターを と比較してリストを反復処理できますiter.next().getWidgetID()。
今のところ、これはすべてうまく機能しています。私がやろうとしているのはpublic static final WidgetID WIDGETID、すべてのサブクラスで宣言し、代わりに親Widgetクラスに実装する必要がないようにすることです。問題は、そのコード行をWidget( の実装とともにgetWidgetID()) に移動すると、 のサブクラスのすべてのインスタンスが、に対して同じにWidgetなるように見えることです。ただし、非静的にすると、 を呼び出すことさえできなくなります。static final WidgetIDSubclassname.WIDGETIDSubclassname.WIDGETID
のインスタンスとサブクラスごとに異なることを確認しながらWidgetID、親クラスに静的を作成するにはどうすればよいですか? それとも、ここでの仕事に間違ったツールを使用していますか?WidgetWidgetWidget
ありがとう!
super()[編集] ライブラリのユーザーがすべてのサブWidgetコンストラクターを呼び出す必要はありません。