晚上好,
我正在开发一组 Java 类,以便一个容器类Box
包含一个List
包含的类Widget
。AWidget
需要能够指定与其他的关系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();
}
所以 can 的子类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
可以遍历它的列表,将第二个参数与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
构造函数。