我对以下内容感到困惑:
我想这样做:
public class MyGenericClass<SomeType> extends SomeMoreAbstractClass<SomeType>{
private Node<SomeType> beginNode;
private static final Node<SomeType> NOT_FOUND = null;
private static class Node<SomeType>{
//class definition here
}
}
即。我想在代码中使用NOT_FOUND
来检查null
我收到错误Cannot make a static reference to the non-static type AnyType
在我声明private static final Node<SomeType> NOT_FOUND = null;
我怎么能得到这个?我更喜欢将它用作类变量而不是实例变量
答案 0 :(得分:6)
您需要删除static
修饰符。根据定义,泛型与具体对象相关联。对于具有通用参数的static
(=对所有对象都相同)成员是不可能的。
当您实例化对象时,不要忘记SomeType
只是您使用的类的占位符。 (像这样:MyGenericClass<Integer> x = new MyGenericClass<Integer>();
)
答案 1 :(得分:2)
只需将该字段声明为
即可private static final Node<?> NOT_FOUND = null;
由于它是静态的,它将在MyGenericClass
的所有实例之间共享,因此它不能引用SomeType
,这是每个类实例指定的类型参数。 Node<?>
使其与所有可能的类型参数兼容。然后,它对于依赖于特定类型参数的任何内容都没有用,但幸运的是,与null
的比较仍然有效。