为什么 HashMap 实例的类类型与 HashMap.class 比较相等?

HashMap<String, Set<String>> foo = new HashMap<>();

if (foo.getClass().equals(HashMap.class)) {

    System.out.print(true);

}

上面的代码打印为真。为什么这两种类型比较相等?我foo.getClass()包含超过类型信息HashMap.class。


ITMISS
浏览 190回答 2
2回答

噜噜哒

Java 实现了带有类型擦除的泛型。在运行时没有关于泛型的信息。Java 语言中引入了泛型以在编译时提供更严格的类型检查并支持泛型编程。为了实现泛型,Java 编译器将类型擦除应用于:如果类型参数是无界的,则将泛型类型中的所有类型参数替换为其边界或对象。因此,生成的字节码仅包含普通的类、接口和方法。必要时插入类型转换以保持类型安全。生成桥接方法以保留扩展泛型类型中的多态性。类型擦除确保不会为参数化类型创建新类;因此,泛型不会产生运行时开销。

慕慕森

泛型在运行时并不重要。因此如下:System.out.println(foo.getClass().equals(HashMap.class));将返回true。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java