从头认识java-13.15 使用泛型时出现的问题(1)-泛型不能使用基础类型

来源:互联网 发布:淘宝女士羽绒服中长款 编辑:程序博客网 时间:2024/06/03 16:17

这一章节我们来讨论一下使用泛型时出现的问题。

今天我们引入第一个问题:就是泛型不能使用基础类型。

1.例子

package com.ray.ch13;import java.util.ArrayList;public class Test {public static void main(String[] args) {// ArrayList<int> list;//errorArrayList<Integer> list = new ArrayList<Integer>();}}


观察上面的代码就可以看见,泛型只能使用Integer,不能够使用int。

但是java里面的自动包装机制提供了实现的可能。

修改一下上面的代码:

package com.ray.ch13;import java.util.ArrayList;public class Test {public static void main(String[] args) {// ArrayList<int> list;//errorArrayList<Integer> list = new ArrayList<Integer>();for (int i = 0; i < 10; i++) {list.add(i);}}}


其实i是int类型,但是通过自动包装机制,直接转换成Integer类型。

但是随着数量的增加,上面的代码无疑会出现非常大的性能问题,这个是一个隐患。

 

2.自动包装机制不是万能的。

例子:

我们下面使用生成器来创建并装载对象。

package com.ray.ch13;public class Test {public static void main(String[] args) {// FillArray.fill(new int[5], new MyGenerator());//errorFillArray.fill(new Integer[5], new MyGenerator());}}interface Generator<T> {T next();}class MyGenerator implements Generator<Integer> {@Overridepublic Integer next() {return 0;}}class FillArray<T> {public static <T> void fill(T[] arr, Generator<T> generator) {for (int i = 0; i < arr.length; i++) {arr[i] = generator.next();}}}


观察上面的代码,在main方法里面,我们分别创建int和Integer的数组,int 的抛异常,在这里,自动包装机制是不起作用的。

 

总结:这一章节主要讨论了泛型不能使用基础类型这一个问题。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

0 0
原创粉丝点击