java泛型数组初始化,Java泛型和数组初始化

该博客探讨了Java中泛型与数组的交互问题。虽然可以声明泛型数组(如`ArrayList<?>[] lists`),但尝试创建它们会导致编译错误,因为这可能导致类型安全问题。博客引用了由于数组的协变性和泛型的不变性之间的不匹配,允许创建泛型数组可能会破坏类型系统。作者提出,尽管存在争议,但为避免潜在的ClassCastException,Java语言设计者选择限制这种行为。文章还链接到官方文档中关于此问题的进一步解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

What's the explanation for the following:

public class GenericsTest {

//statement 1

public ArrayList[]lists;

public GenericsTest()

{

//statement 2

lists = new ArrayList[4];

}

}

The compiler accepts statement 1. Statement 2 is flagged by the compiler for "generic array creation".

A good explanation I've seen regarding disallowing generic arrays is this one, arguing that since arrays are covariant and generics are not you could subvert the generic typing if you allowed generic arrays.

Leaving aside the argument over whether the language should go to the extreme lengths of creating this kind of complicated inconsistency in the treatment of generics to keep you from shooting yourself no matter how hard you try (and if anyone knows of any good discussions on the relative merits/demerits of the issue please post, I'd be interested to see the arguments), why should statement (1) be allowed if (2) isn't?

解决方案

There seems to be obscure cases where you could inadvertently cause a ClassCastException as explained here

http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf (section 7.3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值