gpt4 book ai didi

Java:在父类(super class)中初始化公共(public)静态字段,该字段在每个子类实例中需要不同的值

转载 作者:行者123 更新时间:2023-12-02 13:21:54 25 4
gpt4 key购买 nike

晚上好,

我正在开发一组 Java 类,以便容器类 Box 包含包含类 WidgetListWidget 需要能够指定与其他 Widget 的关系。我认为做到这一点的一个好方法是执行以下操作:

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< 子类的每个实例 似乎为其 Subclassname.WIDGETID 获得相同的static Final WidgetID。但是,使其成为非静态意味着我什至无法再调用 Subclassname.WIDGETID

那么:如何在父 Widget 类中创建静态 WidgetID,同时确保它对于 Widget 和子类的每个实例都是不同的小部件?或者我在这里使用了错误的工具来完成这项工作?

谢谢!

[编辑]我不希望要求库的用户在所有子 Widget 构造函数中调用 super()

最佳答案

既然这个想法似乎是每个特定子类的 WidgetID 都是唯一的,为什么不直接通过它们的类来识别它们呢?

因此,您在执行 getBox().addWidgetRelationship(RelationshipTypes.SomeType, RedWidget.WIDGETID) 的地方,您可以执行 getBox().addWidgetRelationship(RelationshipTypes.SomeType, RedWidget.class) 相反。

关于Java:在父类(super class)中初始化公共(public)静态字段,该字段在每个子类实例中需要不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com