codecamp

泛型

笔者能力有限,总结有误的地方,请读者协作更正。

1.Java中的泛型是什么?使用泛型的好处?

在集合中存储对象,并在使用前进行类型转换很不方便;java1.5开始提供了泛型。 作用:在编译期进行类型转换,把正确的类型对象放在入集合中,避免出现类型转换异常。

2.泛型是如何工作的?什么是类型擦除?

泛型是通过类型擦除来实现的,编译器在编译的时候会擦除所有类型的相关信息,所有在运行的时候不存在任何类型转换。例如:定义两个数组,Arraylist<String>,ArrayList<Integer>,我们用getClass()获取类的信息,返回结果都为true,说明类型在编译的时候被擦除。

为什么泛型用类型擦除来实现? 因为泛型能保证,我们只需要定义一次类,就可以被任何数据类型使用,而不是一种数据类型定义一个类; 泛型只能保存我们使用的数据类型,而不是一堆的Object;

3.什么是泛型中的限定通配符?和非限定通配符?

限定通配符对类进行限制:

4.如何编写一个泛型方法,让它能接受泛型参数并返回泛型类型?

使用T, E or K,V等被广泛认可的类型占位符;最简单的情况下,一个泛型方法可能会像这样:

5.你可以把List<String>传递给一个接受List<Object>参数的方法吗?

String是一种Object,看起来可以传递,实际不可以;因为List<String>是自定义泛型的,只能用来存储String; List<Object>可以用来存储所有数据类型。

6.Array可以用泛型么?

Array事实上并不支持泛型; Java一书中建议使用List来代替Array,因为List可以提供编译期的类型安全保证,而Array却不能。

7.如何阻止java中的“类型检查”错误?

原因:把泛型和原始数据类型混合使用,编译时会出现该错误。例如: List<String> rawList = new ArrayList()

8.是否可以使用Object代替通配符“?”使用?

List<?> 是一个未知类型的List,而List<Object> 其实是任意类型的List。 可以把List<String>, List<Integer>赋值给List<?>, 却不能把List<String>赋值给 List<Object>。     

9.Java中List<Object>和原始类型的List的区别?

在编译时编译器不会对原始类型进行类型安全检查,却会对带参数的类型进行检查,通过使用Object作为类型,可以告知编译器该方法可以接受任何类型的对象,比如String或Integer。

原始类型List可以存任何数据类型,但却不能把List<String>传递给接受 List<Object>的方法,即指定泛型的List不能传给Object; 因为会产生编译错误。

10.List<String>和原始类型List之间的区别?

带参数类型是类型安全的,由编译器保证的,但原始类型List却不是类型安全 的。 原始类型List可以存任何数据类型,List<String>只能存String类型

反射
集合
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

第2章 数据库

SQL

第4章 hadoop

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }