java - 获取Java泛型的类,以及泛型的接口(interface)实现

标签 java generics

我想创建一个基本上像这样的类:

public class MyClass<T implements Serializable) {

   void function() {
      Class c = T.class;
   }
}

两个错误:
- 我不能调用 T.class,即使我可以用任何其他对象类型调用它
- 我不能强制 T 以这种方式实现 Serializable

如何解决我的两个泛型问题?

干杯

尼克

最佳答案

你无法获取类型。

泛型是使用一种叫做 type-erasure 的东西实现的.

When a generic type is instantiated, the compiler translates those types by a technique called type erasure — a process where the compiler removes all information related to type parameters and type arguments within a class or method. Type erasure enables Java applications that use generics to maintain binary compatibility with Java libraries and applications that were created before generics.

其本质是类型信息被编译器使用并被丢弃,因此在运行时不可用。

关于执行 T implements Serializable,您只需要以下内容:

public class MyClass<T extends Serializable>)
{
  public void function(T obj) 
  {
    ...
  }
}

这只是指是一个关系,所以一个实现了Serializable的类,是一个 Serializable 并且可以传递给 function

关于java - 获取Java泛型的类,以及泛型的接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1320910/

相关文章:

java - FloatBuffer 绘制纹理四边形,但 ShortBuffer 不绘制

java - 如何使用 ASM java 库获取 Jar 中存在的类的内部类中的所有方法?

java - 重用增强型 For 循环不同的类类型

generics - Scala 中基类和所有派生类的模式匹配

java - 泛型集合中的 ClassCastException 与 instanceOf

Java 对具有两个泛型参数的类的泛型类型检查应该只包含相同类型的类

java - 将 Curl 转换为 Java 等价物

java.io.IOException : No space left on device Android 异常

.net - 如何找到泛型参数的 TypeSpec

Java 正则表达式调整