晚上好,
我正在开发一组Java类,以便容器类Box
包含所包含类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
可以遍历列表,将第二个参数与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
构造函数中调用。 最佳答案
如果每个子类都有一个不同的值,则该变量不是超类的成员。
换句话说,是的,每个子类都应声明其自己的WIDGETID;您不能将各种类的那些成员合并为超类中的单个成员。
关于java - Java:在父类(super class)中初始化一个公共(public)静态字段,在每个子类实例中需要一个不同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2640883/