晚上好,
我正在开发一组 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构造函数。