在java中实现嵌套泛型

时间:2017-10-30 20:44:19

标签: java generics interface

我有以下课程

public class Element <T1 extends Comparable<T1>,T2> {
   public T1 key;
   public T2 value;
}

这可以按照我的意愿编译和工作。

我有一个接口,我想保证其中的所有元素具有相同的类型。但我想在实现接口的类中指定该类型。举个例子,我可能希望实现接口的类都是Element<String,Integer>类型。

但是,这不会编译

public interface D <Element<T1,T2>>  {
  ArrayList <Element<T1,T2>> getVertices();
}

这会编译

public interface D <Element>  {
    ArrayList <Element> getVertices();
}

当我运行此代码时

public class G<Element> implements D<Element> {
    public ArrayList<Element> getVertices(){return null;}

    public static void main(String[] args) {
        G <Element<String,Integer>> g = new G<>();
    }
}

我收到此错误。 '错误:(7,12)java:非静态类型变量元素不能从静态上下文'

引用

我不确定如何在界面中指定我希望所有元素都必须属于同一类型。

1 个答案:

答案 0 :(得分:2)

T1接口中的T2D未定义,这就是您收到编译错误的原因。第二个D示例使用了Element的行类型,这就是您的G <Element<String,Integer>>声明错误的原因。此外,您根本不需要参数化G

以下是使用适当泛型的修改代码:

public interface D < T1 extends Comparable<T1>, T2  >  {

    ArrayList < Element<T1, T2> > getVertices();
}

public static class G implements D< String, Integer > {
    public ArrayList< Element<String, Integer> > getVertices(){return null;}

    public static void main(String[] args) {
        G g = new G();
    }
}