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

时间:2018-04-15 07:04:33

标签: java generics

我发现在声明变量和分配实例时都必须使用通用表单。我想问的问题是: 有没有变量和实例的类型可以不同? 像

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

1 个答案:

答案 0 :(得分:1)

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

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

有没有变量和实例的类型可以不同?

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

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

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

使用这些通配符,您对对象的使用仍然非常有限。例如,您只能get Number List<? extends Number> add,但您不能Integer新的List<Double>(因为它可能是{1}}你知道的所有事情。)

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

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