我正在尝试使用泛型构建一个简单的界面,这是我正在尝试使用的代码:
public interface MyInterface<T>
{
public ArrayList<T> items;
//...
}
但是我在从非静态上下文等访问静态变量 T 时遇到错误。我怎样才能完成我想做的事情?这就是我设想使用实现此接口(interface)的类的方式:
MyInterface<SomeObject> foo = new MyInterfaceImpl<>();
for (SomeObject bar: foo.items)
{
bar.someMethod();
}
是否可以通过接口(interface)指定?
最佳答案
在接口(interface)中声明的所有变量默认情况下都是静态的和最终的所以你的通用类型 T 不能适用于 ArrayList
。所以它引发了错误 Cannot make a static reference to the non-static type T
来自Java Language Specification Sec. 8.1.2
- 引用泛型的类型参数是一个编译时错误 C 类任何地方:
- C 静态成员的声明(§8.3.1.1、§8.4.3.2、§8.5.1), 或
- 声明嵌套的任何类型声明的静态成员 在 C 中,或
- C 的静态初始化程序(§8.7),或
- 嵌套在 C 中的任何类声明的静态初始值设定项。
关于java - 如何在 java 接口(interface)中使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14849087/