自动装箱与泛型类中的基本类型?

huangapple go评论70阅读模式
英文:

Autoboxing with primitive type in type of generic class?

问题

为什么 ```List<int> list1 = new ArrayList<>();``` 不起作用,而 ```List<int[]> list3 = new ArrayList<>();``` 和 ```List<Integer[]> list4 = new ArrayList<>();``` 起作用呢?

import java.util.ArrayList;
import java.util.List;

public class Test
{
public static void main(String[] args)
{
List list1 = new ArrayList<>(); // 为什么不起作用
List list2 = new ArrayList<>();
List<int[]> list3 = new ArrayList<>(); // 为什么起作用
List<Integer[]> list4 = new ArrayList<>(); // 为什么起作用
}
}


<details>
<summary>英文:</summary>

Why ```List&lt;int&gt; list1 = new ArrayList&lt;&gt;();``` doesn&#39;t working, and why ```List&lt;int[]&gt; list3 = new ArrayList&lt;&gt;();``` and ```List&lt;Integer[]&gt; list4 = new ArrayList&lt;&gt;();``` is working?

import java.util.ArrayList;
import java.util.List;

public class Test
{
public static void main(String[] args)
{
List<int> list1 = new ArrayList<>(); // why is doesn't working
List<Integer> list2 = new ArrayList<>();
List<int[]> list3 = new ArrayList<>(); // why working
List<Integer[]> list4 = new ArrayList<>(); // why working
}
}


</details>


# 答案1
**得分**: 2

在Java中,你有原始类型和引用类型。
`int`是一个原始类型,而`Integer`是一个引用类型。

在Java泛型中,你有*类型参数*。换句话说,类型参数是一个可以被引用类型名称替代的占位符。类型参数**不能**被原始类型替代。因此,`List&lt;int&gt;`是不允许的。

`List&lt;Integer&gt;`是允许的,因为`Integer`是引用类型。

在Java中,数组也是引用类型,即使它是由原始类型构成的数组。因此,`int[]`是一个引用类型,因此`List&lt;int[]&gt;`是允许的。

<details>
<summary>英文:</summary>

In java, you have primitive types and you have reference types.  
`int` is a primitive type and `Integer` is a reference type.

In java generics you have *type parameters*. In other words, a type parameter is a place holder that can be replaced by the name of a reference type. A type parameter **cannot** be replaced with a primitive type. Hence `List&lt;int&gt;` is not allowed.

`List&lt;Integer&gt;` is allowed since `Integer` is a reference type.

In java, an array is also a reference type, even if it is an array of primitive types. Hence `int[]` is a reference type and therefore `List&lt;int[]&gt;` is allowed.


</details>



# 答案2
**得分**: 2

在Java泛型中,您永远不会将原始类型作为引用,例如:

```java
List<Integer> List<Double> ArrayList<Long>

因为它们不是对象!!在Java泛型中,我们使用对象编写通用类!!

英文:

In Java Generics, you never make a primitive type as a reference, like :

List&lt;int&gt; List&lt;double&gt; ArrayList&lt;long&gt; 

because those aren't objects !!
int the java Generics, we code the generic classes with objects !!

huangapple
  • 本文由 发表于 2020年8月28日 19:10:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/63632646.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定