1. 什么是泛型中的限定通配符和非限定通配符?
限定通配符对类型进行了限制。有两种限定通配符,一种是<? extends T>,它通过确保类型必须是T的子类来设定类型的上界,另一种是<? super T>它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须使用限定内的类型来进行初始化,否则会导致编译错误。另一方面<?>表示非限定通配符,因为<?>可以用任意类型来代替。
2. List , List<Object>,List<String> ,List<?>四种情形的注意点?
- List , List<Object > List<?>通过add 方法,可以添加任一类型的数据!
- List <Object> list1 , List<String> list2 , List list3 , List<?> list4
- list1 = list2 // 错误的不能的
- list3 = list2 可以的
- list4 = list2 可以的
那么 List 与 List<String> 的不同?
参数类型是类型安全的,而且类型安全是由编译器保证的,但原始类型List却不是类型安全的。
使用泛型参数类型你不需要进行类型转换,但是使用原始类型,你需要进行显示的类型转换。
List listOfRawTypes = new ArrayList(); listOfRawTypes.add("abc"); listOfRawTypes.add(123); //编译器允许这样,但是在运行时却会出现异常 String item = (String)listOfRawTypes.get(0); //需要显示的类型转换 item = (String)listOfRawTypes.get(1); //抛出ClassCastException,因为Integer不能被转换为String List<String> listOfString = new ArrayList(); listOfString.add("abcd"); listOfString.add(123);//编译错误,比在运行时错误要好 item = listOfString.get(0); //不需要显示的类型转换---编译器自动转换
3. 类型擦除?
它只在程序源码中存在,在编译后的字节码文件中,就已经被替换为原来的原生类型(Raw Type,也称为裸类型)了,并且在相应的地方插入了强制转型代码,因此对于运行期的Java语言来说,ArrayList<int>与ArrayList<String>就是同一个类
下面的这个例子,编译是不能够通过的,因为编译的时候,就会把类型擦除,变成了原始类型List<E>!!
public class GenericTypes { public static void method(List<String> list) { System.out.println("invoke method(List<String> list)"); } public static void method(List<Integer> list) { System.out.println("invoke method(List<Integer> list)"); } }
4. 数组没有泛型,用ArrayList
相关推荐
泛型类、泛型方法、泛型接口、泛型委托 泛型类、泛型方法、泛型接口、泛型委托
泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合
当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...
C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型
C#的泛型C#的泛型
泛型学习和泛型接口和泛型经典示例
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照
泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法
在.NET FCL为我们提供了很多...结论:如果在C#2.0版本以上,尽量使用泛型集合类,而不使用非泛型集合类。因为,1. 泛型编程是从c#2.0开始才被.net支持的。2.泛型集合在性能和类型安全方面优于非泛型集 合。 。。。。
c#泛型类、泛型方法、泛型接口、泛型委托
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490705
集合与泛型知识点的总结
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
C++/CLI泛型编程概览 CLI泛型介绍 CLI泛型适用对象 CLI泛型约束 CLI泛型与C++模板 讲座总结 Q&A
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
通过7个实例详细介绍泛型的使用,包括普通泛型、通配符、泛型方法、泛型接口、受限泛型、泛型的转型、泛型数组。相信看完这几个泛型的例子就会使用泛型了。注意,这里并不介绍泛型的具体语法,只介绍泛型的使用。
泛型的知识,请自己参考吧。主要介绍java泛型的知识。
详细的介绍了Java是伪泛型的原因,介绍了类型擦除的内容等。
讲述泛型及泛型的子类型、通配符
Java Generics and Collections 英文版,详细描述java 泛型技术