1

如何确定泛型在运行时使用的对象类型?

4

4 回答 4

3

由于类型擦除,您无法确定通用对象实例的实际类型参数。您可以做的最好的事情是进行设置,以便您可以将类对象传递给需要知道实际类型的代码。例如,这是java.util.EnumMap在其构造函数之一中所做的。

于 2013-04-09T21:29:27.133 回答
3

如果你的意思是Tin List<T>(例如),你不能,因为 Java 使用类型 erasure。在运行时,aList<T>看起来像List. 这是真的,除非在匿名类的边缘情况下,如果你跳过箍来找到参数类型,这是可能的。但在一般情况下,你不能。您通常必须单独传达该信息。

于 2013-04-09T21:29:34.653 回答
1

在运行时无法获取“泛型”的对象类型。如果我们使用 object.getclass(),那么我们可以获取任何具有类名的类的对象。

于 2013-04-09T21:33:50.970 回答
1

首先我们解释什么是泛型

Java中的泛型是Java 5中添加的重要功能之一,

来自Oracle 的文档

泛型被引入 Java 语言以在编译时提供更严格的类型检查并支持泛型编程。为了实现泛型,Java 编译器将类型擦除应用于:

  • 如果类型参数是无界的,则将泛型类型中的所有类型参数替换为其边界或 Object。因此,生成的字节码只包含普通的类、接口和方法。

  • 必要时插入类型转换以保持类型安全。

  • 生成桥方法以保留扩展泛型类型中的多态性。

类型擦除确保不会为参数化类型创建新类;因此,泛型不会产生运行时开销。

现在如何借助此链接在运行时获取泛型类型

阅读:http ://www.west-wind.com/weblog/posts/2011/Nov/11/Dynamically-creating-a-Generic-Type-at-Runtime

于 2013-05-15T22:10:55.277 回答