我有以下课程
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:非静态类型变量元素不能从静态上下文'
引用我不确定如何在界面中指定我希望所有元素都必须属于同一类型。
答案 0 :(得分:2)
T1
接口中的T2
和D
未定义,这就是您收到编译错误的原因。第二个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();
}
}