【发布时间】:2011-09-28 10:59:22
【问题描述】:
我读到你不能在泛型类中声明静态变量/方法,我真的不知道如何解决我的问题或解决它,所以我请求你的指导。
我想要的是一个通用的“索引”,我的所有核心类都将扩展它。
我正在创建一个游戏引擎,一个例子是我将拥有不同的游戏状态,它们都扩展了State,而它们又扩展了Nexus<State>。我想要静态头部和尾部的原因是我可以保留所有游戏状态的链接列表,因为它们都在创建时添加到该列表中。
另一个例子是我将拥有不同的游戏对象,它们都扩展了GameObject,而它们又扩展了Nexus<GameObject>。
这是名为Nexus的索引:
public abstract class Nexus<T>
{
private static T head = null;
private static T tail = null;
private T next = null;
private static int num = 0;
protected Nexus() { this.Add( (T)this ); }
public T Add( T obj )
{
((Nexus)obj).next = null;
if( num++ == 0 ) head = tail = obj;
else tail = ( tail.next = obj );
return obj;
}
}
如果有人有其他解决方案或解决方法,我会全力以赴!
【问题讨论】:
-
鉴于静态字段的名称,几乎可以肯定的是,您不应该在这里使用静态字段。无论有没有你的泛型,这都是真的。但是您从哪里读到应该始终避免泛型类中的静态成员?我自己从未听说过,我强烈反对。
-
这很奇怪,我得到了这个:Game.main(Game.java:29)线程“main”中的异常java.lang.ExceptionInInitializerError 原因:java.lang.RuntimeException:无法编译的源代码- 不能从 Nexus 的静态上下文中引用非静态类型变量 T。
(Nexus.java:13) ... 还有 1 个 Java 结果:1 -
@Kirk 谷歌快速搜索“不能从静态上下文引用非静态类型变量”给了我大量的结果,这些结果都说明了我写的内容,很多来自这个网站:/
-
@Tanax 没有。没有人说在泛型类中不能有静态变量,编译器、编译器错误消息或异常也没有。
-
我很困惑呵呵。第 13 行是这样的:private static T head = null;
标签: java list generics static linked-list