我正在为树数据结构编写几个接口。我正进入(状态
Cannot make a static reference to the non-static type E
编译错误。
这是我的界面层次结构:
package com.mohit.dsa.global.position;
/**
* @author mohitkum
*/
public interface Position<E> {
public E getElement() throws IllegalStateException;
}
-
package com.mohit.dsa.tree;
import com.mohit.dsa.global.position.Position;
public interface Tree<E> extends Iterable<E> {
Position<E> root;//compilation error for E
}
如果有人能够解释这个错误的原因,那将会很棒。
答案 0 :(得分:2)
如果界面中有字段,则为public static final。所以Position root;
(即使没有泛型)在接口中无效。进一步假设您正在初始化最终的字段根,并将您的Tree接口实现为:
class A1 implements Tree<A>
class B1 implements Tree<B>
这会成为一个问题吗?由于这将转化为:
在一个案例中 Position<A>
root
另一个案例中Position<B>
root
但你的领域是最终的,所以这不能工作。
以下主题是相关的: Java - An interface that has static field pointing to class name of its sub class?