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