java - 原始类型在 Java 中如何工作?

标签 java generics raw-types

<分区>

我正在学习泛型,但我有一个误解。

例如我有这个简单的代码:

import java.util.ArrayList;

public class DemoApp {

    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(1);
        System.out.println(list.get(0).getClass().getName()); 
        int value = (Integer) list.get(0);
    }
}

我不明白为什么要将 list.get(0) 转换为 Integer 因为这条语句 System.out.println(list.get (0).getClass().getName()); 有这样的结果 java.lang.Integer

如果我使用此语句 int value = list.get(0); 我会收到此错误:Type mismatch: cannot convert from Object to int... 和实在不明白,list.get(0)Object还是Integer

最佳答案

因为当您使用原始类型(如没有任何通用类型的 ArrayList)时,Java 假定该列表中元素的类型是 Object。所以 list.get(0) 将返回类型为 Object 的引用。因此,您需要转换。

list.get(0) 返回的对象是 Integer 类型,但对它的引用是 Object 类型,这就是编译器提示的原因因为您想将类型 Object 的引用分配给基本类型 int 的变量。

关于java - 原始类型在 Java 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55403895/

相关文章:

Java/HashMap/性能

java - 将 375x375 图像的网格拼接成一个

java - 用java加载图像占用了我太多的资源..有什么方法可以让我的程序看起来很漂亮?

C# 嵌套泛型在使用约束时区别对待

java - ClassName 的原始类型是否等同于 ClassName<Object>?

java - 如何输出记分牌的更新值

c# - 有没有办法告诉我在运行时使用的是哪个枚举?

java - 为什么这个通用代码在 java 8 中编译?

c++ - 模板类型背后的含义是什么?

java - 使用无限通配符会捕获错误的情况,但只有在使用原始类型时才会被标记为警告