【javase复习】## day8 泛型 ##
2016-08-03 20:24
525 查看
为什么要运用泛型:
将运行时的异常提前到编译时。
避免了多余的强制转型。
JDK1.5之后才有
泛型在集合中的常见应用:
注意: 泛型没有多态的概念,左右两边的数据 类型必须 要一致,或者只是写一边的泛型类型。 要用包装类!!!!
推荐使用: 两边都写泛型。
一边写泛型另一边不写也语法正确是为了照顾新老系统的兼容【假设有JDK1.5之前版本写的工具类返回一个不带泛型的容器或者需要的参数是不带泛型的,依然可以将带泛型的传进去使用。】
注意方法的返回值是在传入实参的时候确定的。
注意, 返回值前面的只是一个占位符, 说明这个方法需要用到泛型QQ。可以是返回值或者是实参之一是QQ类型。
所以不能作用于静态方法!!!!,如果静态方法也要用泛型,则要自己定义方法上的泛型!!!!!
泛型接口要注意的事项:
1. 接口上自定义的泛型的具体数据类型是在实现一个接口的时候指定 的。
2. 在接口上自定义的泛型如果在实现接口的时候没有指定具体的数据类型,那么默认为Object类型。
如果实现一个接口的时候,还不明确我目前要操作的数据类型,要等待创建接口实现类 对象的时候我才能指定泛型的具体数据类型。
则要在类上声明泛型。
将运行时的异常提前到编译时。
避免了多余的强制转型。
JDK1.5之后才有
泛型在集合中的常见应用:
ArrayList<String> list = new ArrayList<String>(); true 推荐使用。 ArrayList<Object> list = new ArrayList<String>(); false ArrayList<String> list = new ArrayList<Object>(); false //以下两种写法主要是为了兼顾新老系统的兼用性问题。 * ArrayList<String> list = new ArrayList(); true ArrayList list = new ArrayList<String>(); true
注意: 泛型没有多态的概念,左右两边的数据 类型必须 要一致,或者只是写一边的泛型类型。 要用包装类!!!!
推荐使用: 两边都写泛型。
一边写泛型另一边不写也语法正确是为了照顾新老系统的兼容【假设有JDK1.5之前版本写的工具类返回一个不带泛型的容器或者需要的参数是不带泛型的,依然可以将带泛型的传进去使用。】
———–在方法上使用泛型
public class rrr { public static void main(String[] args) { String str = rrr.get("sb"); System.out.println(str); } public static <QQ>QQ get(QQ o){ return o; } }
注意方法的返回值是在传入实参的时候确定的。
注意, 返回值前面的只是一个占位符, 说明这个方法需要用到泛型QQ。可以是返回值或者是实参之一是QQ类型。
——— 泛型类!!!!!
创建对象的时候确定泛型的类型。所以不能作用于静态方法!!!!,如果静态方法也要用泛型,则要自己定义方法上的泛型!!!!!
class MyArrays<T>{ //元素翻转 public void reverse(T[] arr){ for(int startIndex = 0, endIndex = arr.length-1 ; startIndex<endIndex ; startIndex++,endIndex--){ T temp = arr[startIndex]; arr[startIndex] = arr[endIndex]; arr[endIndex] = temp; } } // public String toString(T[] arr){ StringBuilder sb = new StringBuilder(); for(int i = 0 ; i < arr.length ; i++){ if(i==0){ sb.append("["+arr[i]+","); }else if(i==arr.length-1){ sb.append(arr[i]+"]"); }else{ sb.append(arr[i]+","); } } return sb.toString(); } public static <T>void print(T[] t){ } } public class Demo3 { public static void main(String[] args) { Integer[] arr = {10,12,14,19}; MyArrays<Integer> tool = new MyArrays<Integer>();//这里确定了泛型类型就是Integer类!!!!!! tool.reverse(arr); System.out.println("数组的元素:"+tool.toString(arr)); MyArrays<String> tool2 = new MyArrays<String>(); String[] arr2 = {"aaa","bbb","ccc"}; tool2.reverse(arr2); MyArrays tool3 = new MyArrays();//不指定泛型则默认为Object类型!!!!! ArrayList<String> list = new ArrayList<String>(); }
##——— 泛型接口!!!!! ##
泛型接口的定义格式:interface 接口名<声明自定义泛型>{ }
泛型接口要注意的事项:
1. 接口上自定义的泛型的具体数据类型是在实现一个接口的时候指定 的。
2. 在接口上自定义的泛型如果在实现接口的时候没有指定具体的数据类型,那么默认为Object类型。
interface Dao<T>{ public void add(T t); } public class Demo implements Dao<String> { public static void main(String[] args){ } public void add(String str){}//上面实现的时候指定了String 所以重写只能是String类型,如果没有指定的话默认Object类型!! }
如果实现一个接口的时候,还不明确我目前要操作的数据类型,要等待创建接口实现类 对象的时候我才能指定泛型的具体数据类型。
则要在类上声明泛型。
interface Dao<T>{ public void add(T t); } public class Demo4<T> implements Dao<T> { public static void main(String[] args) { Demo4<String> d = new Demo4<String>();//实现的时候没有指定具体泛型,到创建对象的时候才指定!!!! } public void add(T t){ } }
相关文章推荐
- 【javase复习】## day8 集合 Set接口 ##
- JavaSE复习_8 泛型程序设计
- 【javase复习】## day1 故事、构成、环境变量的深入认识 ##
- 【javase复习】## day1 标识符、常量、变量、运算符 ##
- 【javase复习】## day5 多态内存分析、 内部类 ##
- 【javase复习】## day9 Map接口 ##
- 【javase复习】## day5 异常 ##
- 【javase复习】## day11 其他流 ##
- JavaSE复习之八 基础知识:泛型
- 【javase复习】## day11 其他流----打印流 ##
- 【javase复习】## 网络编程 ##
- 【javase复习】##day2 对象的内存分析、匿名对象 ##
- 【javase复习】## 反射 ##
- 【javase复习】## day4 抽象类、接口 ##
- 【javase复习】## day 9正则表达式 ##
- JavaSE复习之二 基础知识:面向对象 补充 (5)
- JavaSE复习之四 基础知识:集合 补充(1)
- JavaSE复习之四 基础知识:集合 补充(3)
- JavaSE基础复习:面向对象知识点二
- 2010/7/28 泛型及复习排序