java - 如何在 java 接口(interface)中使用泛型?

标签 java generics interface

我正在尝试使用泛型构建一个简单的界面,这是我正在尝试使用的代码:

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/

相关文章:

Java:k阶元素集合的简单组合

java - "Unexpected token"使用下界通配符 (Java)

c# - 使用泛型属性调用重载方法会调用错误的重载

java - 缩小实现中的论点

Typescript 扩展第三方类错误 : ElementHandle only refers to a type, 但在此处用作值

java - JSch 不支持的 KEX 算法的解决方法

java - 使用数组列表java进行插入排序

java - 带有嵌入式 Tomcat 和多个环境的 Spring Boot 项目

.net - typeof(T) 与 <T>

delphi - 抽象与接口(interface) - 在 Delphi 中分离定义和实现