java等于两侧_java泛型中,为什么两边都要有泛型,没有会怎么样?

new ArrayList()是java1.5以前不支持泛型的写法,为了保持向下兼容才保留的,现在建议指定具体的类型,也就是warning里提示的内容。

为了省事也提供了语法糖,像其他回答提到的:

List a = new ArrayList<>();

在java12中还更新了对类型推断(感谢纠正)的支持,还可以这样写:

var a = new ArrayList();

题主在评论中指出实际上warning一定有它的原因,那么编译器中认为有问题的场景是怎么样的,这两种写法我是了解的,但是为什么会有这两种不同写法,实际上一定有区别

是这样的,在加入泛型之前,这样的list是不限制类型的,你可以加入任意类型,比如加一个Integer,然后又加一个String什么的,这样的操作无论有意无意肯定会很容易出错,并且要运行之后才会抛出异常,加入泛型就是为了在编译时就明确问题,尽早发现并解决问题。

而为了让编译器明白,就必须要显式指定类型,也就是new ArrayList();

对于一个指定了类型的list:

List a = new ArrayList<>();

a.add("abc");

a.add(123); // 编译error

而对于旧代码:

List a = new ArrayList(); // 编译warning

a.add("abc"); // 编译warning

a.add(123); // 编译warning

你依旧可以加入任意类型的对象,只会有warning,像前面说的,为了兼容旧代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值