我正在研究一系列所有继承自单个基础抽象类的类。
为了跟踪所有这些子类,我想实现类似GUID的东西 - 出于我的目的,它不一定是实际的GUID,只是每个都是唯一的int。子类的实例。增加的int是我一直希望使用的。
我喜欢做的是在我的抽象类中实现以下内容:
abstract class ParentObject{
static int GUID = 0;
//other stuff
}
此后,每个子类在其构造函数中都有myGUID = GUID++;
但是,每当我尝试这个时,我都会从Processing IDE中收到以下错误:
字段GUID不能声明为static;静态字段只能是 在静态或顶级类型中声明。
由于Processing处理类文件(一切都是内部类),我不能拥有静态类成员。我有哪些选择以其他方式复制此功能?
编辑:这是在Processing和Processing IDE中完成的。 ParentObject类在其自己的处理文件中。
Edite2:我了解到Processing与Java不同的原因是所有Processing类都是Inner Classes。因此,我重新添加了Java标记并重新提出了问题。
答案 0 :(得分:0)
静态保护方法getNextGUID()可以工作
public abstract class ParentObject{
private static int GUID = 0;
protected static int getNextGUID(){
return GUID++;
}
//other stuff
}
不要忘记同步它/当你有多个线程时使用AtomicInteger
答案 1 :(得分:0)
好吧,然后面对它。你不能这样做。如果你真的需要它,声明一个外部类来处理这段代码,并在顶级类的构造函数中调用它。
如果你必须使用这个内部类的层次结构,那么你就不能这样做。 Java不会以你想要的方式接受它。您可以将抽象类声明为静态。
static abstract class ParentObject {
private static int GUID = 0;
}
但我几乎肯定这对你也不适用。所以,我建议在其他地方创建一个新的外部类来处理它。
public class GUID {
private static int GUID = 0;
public synchronized static void increment() {
GUID++;
}
}
abstract class ParentObject {
ParentObject() {
GUID.increment();
// constructor's stuff
}
}
这可能会降低您的应用程序速度(取决于您实例化课程的频率),但不是很明显。