无法对非静态类型E进行静态引用

时间:2015-11-07 06:16:01

标签: java generics interface

我正在为树数据结构编写几个接口。我正进入(状态 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
}

如果有人能够解释这个错误的原因,那将会很棒。

1 个答案:

答案 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?