こんばんは、
コンテナークラスBox
に包含クラスの が含まれるように、一連の Java クラスを開発しています。Aは、他の との関係を指定できる必要があります。これを行う良い方法は、次のようにすることだと思いました。List
Widget
Widget
Widgets
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
、Box
2 番目のパラメーターを と比較してリストを反復処理できますiter.next().getWidgetID()
。
今のところ、これはすべてうまく機能しています。私がやろうとしているのはpublic static final WidgetID WIDGETID
、すべてのサブクラスで宣言し、代わりに親Widget
クラスに実装する必要がないようにすることです。問題は、そのコード行をWidget
( の実装とともにgetWidgetID()
) に移動すると、 のサブクラスのすべてのインスタンスが、に対して同じにWidget
なるように見えることです。ただし、非静的にすると、 を呼び出すことさえできなくなります。static final WidgetID
Subclassname.WIDGETID
Subclassname.WIDGETID
のインスタンスとサブクラスごとに異なることを確認しながらWidgetID
、親クラスに静的を作成するにはどうすればよいですか? それとも、ここでの仕事に間違ったツールを使用していますか?Widget
Widget
Widget
ありがとう!
super()
[編集] ライブラリのユーザーがすべてのサブWidget
コンストラクターを呼び出す必要はありません。