为什么Java中的泛型可以处理类,而不能处理基元类型?

例如,这可以很好地工作:

List<Integer> foo = new ArrayList<Integer>();

但这是不允许的:

List<int> bar = new ArrayList<int>();

推荐答案

Java中的泛型完全是编译时构造——编译器将所有泛型使用转换为正确类型的类型转换.这是为了与以前的JVM运行时保持向后兼容性.

这是:

List<ClassA> list = new ArrayList<ClassA>();
list.add(new ClassA());
ClassA a = list.get(0);

变成(大致):

List list = new ArrayList();
list.add(new ClassA());
ClassA a = (ClassA)list.get(0);

因此,任何用作泛型的东西都必须可以转换为Object(在本例中,get(0)返回Object),而基元类型不是,所以它们不能在泛型中使用.

Java相关问答推荐

Java事件系统通用转换为有界通配符

Java List with all combinations of 8 booleans

使用JdkClientHttpRequestFactory通过Spring RestClient和Wiemock读取时达到EOF

如何让JFileChooser(DIRECTORIES_ONLY)从FolderName中的空白开始?

现场观看Android Studio中的变化

JavaFX Maven Assembly插件一直打包到错误的JDK版本

扩展到弹出窗口宽度的JavaFX文本字段

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

Spring data JPA/Hibernate根据id获取一个列值

Java编译器抛出可能未正确初始化的错误?

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

JDK 21-为什么线程局部随机S nextInt不直接用Super.nextInt实现?

Java中将文本拆分为数字或十进制数字和字符串

Groovy/Java:匹配带引号的命令选项

Java页面筛选器问题

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

Java堆中的许多java.time.ZoneRegion实例.ZoneId实例不应该被缓存吗?

如何在EL处理器中定义带有命名空间的变量?

如何在IntelliJ IDEA的Build.sbt中添加外部JAR文件?

Java 21保护模式的穷尽性