Java:不同的泛型类型声明和实例

标签 java generics

我发现在声明变量和分配实例时都必须使用通用形式。我想问的问题是这样的: 变量和实例的类型是否可以不同? 喜欢

List<Object> list = new ArrayList<Integer>();

最佳答案

首先,可以使用菱形运算符来推断右侧的类型:

List<Object> list = new ArrayList<>();

Is there any case the type of variable and instance can be different?

Java 中的泛型类型会在运行时被删除。这意味着实例没有泛型类型。该类型仅在编译时存在于变量上。

左侧和右侧的泛型类型不必完全相同,但是您必须使用通配符:

List<?> list = new ArrayList<Integer>();
List<? extends Number> list = new ArrayList<Integer>();

使用这些通配符,您仍然可以对对象执行的操作非常有限。例如,您只能 get一个Number出一个List<? extends Number> ,但你不能add一个新的Integer (因为据你所知,它可能是 List<Double>)。

如果您想编写可以接受某些接口(interface)类型列表的方法,这仍然很有用:

boolean areAllPositive(List<? extends Number> numbers) { ... }

关于Java:不同的泛型类型声明和实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839329/

相关文章:

java - 在 Java 中处理重写方法层次结构中的异常

java - 如何从一个文本字段获取值到另一个文本字段

java - 根据请求参数渲染不同的图 block (Spring 框架和图 block )

c# - 如何将动态类型的 Action<T> 传递给方法

c# - 如何获得具有多个类型参数的泛型类的类型? - C#

c# - 为泛型类实现 IComparable<T> 接口(interface)以比较类型 T

Java TreeMap 基于值排序去除重复值

Java代码片段逻辑

java - 如何用不同类型的列表初始化一个对象?

TypeScript - tsx 文件中无法识别类型参数?