java泛型基础
2015-08-26 23:03
525 查看
1、我们可以为任何类、接口增加泛型声明,如下
2、不管泛型的实际类型参数是什么,他们在运行时总有同样的类(class),如下
3、使用类型通配符“?”,使用List<?>可以表示各种泛型List的父类,如下
注意:这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素加入其中,如下代码会引起编译错误
4、可以设定类型形参的上限更改apple类和test方法,如下
5、由于不能把对象放进未知类型的集合中所以出现了泛型方法,如下
7、Java不支持创建泛型数组
//定义apple类时使用泛型声明 public class Apple<T> { //使用T类型形参定义实例变量 public T info; //下面使用T类型来定义构造器 public Apple(T info){ this.info = info; } public T getInfo() { return info; } public void setInfo(T info) { this.info = info; } }
2、不管泛型的实际类型参数是什么,他们在运行时总有同样的类(class),如下
List<String> list1 = new ArrayList<>(); List<Integer> list2 = new ArrayList<>(); //调用此方法比较两集合的类是否相等,输出为true System.out.println(list1.getClass()==list2.getClass());
3、使用类型通配符“?”,使用List<?>可以表示各种泛型List的父类,如下
public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); test(list); } public static void test(List<?> list){ for (Object obj : list) { System.out.println(obj); } }
注意:这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素加入其中,如下代码会引起编译错误
List<?> list = new ArrayList<>(); list.add(new Object());
4、可以设定类型形参的上限更改apple类和test方法,如下
public class Apple<T extends Number & java.io.Serializable> //表示T类型必需为Number类或其子类,并必须实现Java.io.Serializable接口
public static void test(List<? extends String> list){ //此处代码简洁不用进行强制类型转换 for (String obj : list) { System.out.println(obj); } }
5、由于不能把对象放进未知类型的集合中所以出现了泛型方法,如下
// 修饰符 <T,S> 返回值类型 方法名 形参列表 public static <T> void formArrayToCollection(T[] a, Collection<T> b){ for (T o : a) { b.add(o); } }6、一旦定义了泛型构造器,不仅可以让Java根据参数类型来推断类型形参的类型,而且程序员可以显示的为构造器中的类型形参指定实际类型,如下
static class Foo{ public <T> Foo(T t){ System.out.println(t); } public static void main(String[] args) { //泛型构造器中的T参数为String new Foo("a"); //显示指定泛型构造器中的T参数为String,传给Foo构造器的实参也是String对象正确,若为其他类型如Integer将编译错误 new <String> Foo("a"); } }
7、Java不支持创建泛型数组
相关文章推荐
- Java多线程 -- 信号量
- 【JavaWeb探究】细抠一下web.xml
- 解决Java中OutOfMemoryError的三种方法
- Struts2三种数据转移方式
- 【JavaSE】day06_Map接口_HashMap_hashCode
- Java中遍历Map对象
- Java中遍历Map对象
- Java中遍历Map对象
- java入门
- struts框架
- Spring学习(五)spring整合hibernate
- Java多线程 -- 锁
- 探讨Java I/O类和接口
- Java学习笔记----进制转换及数据类型
- 叶存菜鸟笔记JAVA反射机制的一般应用
- thinkinginjava学习笔记03_基本语法
- 【JavaWeb探究】解析Web运行原理
- Java IO流->处理流->打印流:PrintStream&PrintWriter
- java 大数计算
- Java多线程 -- 有返回值的线程