黑马程序员_学习笔记泛型
2015-04-18 21:31
260 查看
Java培训、Android培训、iOS培训、.Net培训 期待与您交流!
泛型是jdk1.5引入的新特性,为的是将运行时错误,改为编译时错误,让通过程序员识别强制类型转换变成了javac时就可识别的错误。同时也简化了编程代码。
举例
在jdk1.5之前,要分别将Worker和Student作为参数传入方法,需要创建重载的方法
在jdk1.5之后,就可以使用泛型只需要一个方法就可以了
特别是在框架中,当引入泛型,就避免了强制类型转换,并检查了输入的参数是否符合程序要求
如使用TreeSet来使用
1.不使用泛型
2.使用了泛型之后,加强了安全检查
二、泛型
有泛型类
使用泛型类时,在声明是提供标记在整个类中有效,如果被方法使用那么泛型类的对象明确要操作的具体类型之后,所有要操作的类型就已经固定了。
泛型方法,在方法定义时声明
在不同方法声明时可以定义自己不同的泛型限定,是不同方法操作不同类型,而且类型还不确定。
特殊之处:
静态方法不可以访问类上定义的泛型
如果静态方法操作的引用数据类型不确定,可以把泛型定义在方法上
泛型定义放在方法上时,应放在返回值类型前,修饰符后
泛型接口
第一种
泛型的高级应用
泛型是jdk1.5引入的新特性,为的是将运行时错误,改为编译时错误,让通过程序员识别强制类型转换变成了javac时就可识别的错误。同时也简化了编程代码。
举例
在jdk1.5之前,要分别将Worker和Student作为参数传入方法,需要创建重载的方法
public void print(Student stu){ } public void print(Worker w){ }
在jdk1.5之后,就可以使用泛型只需要一个方法就可以了
public <T> void print(T t){ }
特别是在框架中,当引入泛型,就避免了强制类型转换,并检查了输入的参数是否符合程序要求
如使用TreeSet来使用
1.不使用泛型
TreeSet ts=new TreeSet(); ts.add("123"); ts.add(new String("234")); // ts.add(123);//当强制类型转换时,会出现错误ClassCastException Iterator it=ts.iterator(); while(it.hasNext()){ String s=(String)it.next(); System.out.println(s); }
2.使用了泛型之后,加强了安全检查
<span style="white-space:pre"> </span>TreeSet<String> ts = new TreeSet<>(); ts.add("123"); ts.add(new String("234")); // ts.add(123);//无法添加进去 Iterator<String> it = ts.iterator(); while (it.hasNext()) { String s = it.next();// 不需要强制类型转换 System.out.println(s); }
二、泛型
有泛型类
使用泛型类时,在声明是提供标记在整个类中有效,如果被方法使用那么泛型类的对象明确要操作的具体类型之后,所有要操作的类型就已经固定了。
class GenericDemo<T>{ private T t; }然后在类中就可以把该类型当成一种对象来使用,
泛型方法,在方法定义时声明
<span style="white-space:pre"> </span>public <T> void method(T t){ }
在不同方法声明时可以定义自己不同的泛型限定,是不同方法操作不同类型,而且类型还不确定。
特殊之处:
静态方法不可以访问类上定义的泛型
如果静态方法操作的引用数据类型不确定,可以把泛型定义在方法上
泛型定义放在方法上时,应放在返回值类型前,修饰符后
泛型接口
第一种
interface Inter<T>{ void show(T t); } class InterImp2 implements Inter<String>{ public void show (String t){ System.out.println("show: "+t); } }第二种
interface Inter<T>{ void show(T t); } class InterImp1<T> implements Inter<T>{ public void show (T t){ System.out.println("show: "+t); } }
泛型的高级应用
import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; /* ? 通配符。也可以理解为占位符。 泛型的限定; ? extends E: 可以接收E类型或者E的子类型。上限。 ? super E: 可以接收E类型或者E的父类型。下限 */ class GenericDemo6 { public static void main(String[] args) { /* * ArrayList<String> al = new ArrayList<String>(); * * al.add("abc1"); al.add("abc2"); al.add("abc3"); * * ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(4); * al1.add(7); al1.add(1); * * printColl(al); printColl(al1); */ ArrayList<Person> al = new ArrayList<Person>(); al.add(new Person("abc1")); al.add(new Person("abc2")); al.add(new Person("abc3")); // printColl(al); ArrayList<Student> al1 = new ArrayList<Student>(); al1.add(new Student("abc--1")); al1.add(new Student("abc--2")); al1.add(new Student("abc--3")); printColl(al1); // ArrayList<? extends Person> al = new // ArrayList<Student>();error } public static void printColl(Collection<? extends Person> al) { Iterator<? extends Person> it = al.iterator(); while (it.hasNext()) { System.out.println(it.next().getName()); } } /* * public static void printColl(ArrayList<?> al)//ArrayList al = new * ArrayList<Integer>();error { Iterator<?> it = al.iterator(); * * * while(it.hasNext()) { System.out.println(it.next().toString()); } } */ } class Person { private String name; Person(String name) { this.name = name; } public String getName() { return name; } } class Student extends Person { Student(String name) { super(name); } } /* * * class Student implements Comparable<Person>//<? super E> { public int * compareTo(Person s) { this.getName() } } */ class Comp implements Comparator<Person> { public int compare(Person s1, Person s2) { // Person s1 = new Student("abc1"); return s1.getName().compareTo(s2.getName()); } } /* * TreeSet<Student> ts = new TreeSet<Student>(new Comp()); ts.add(new * Student("abc1")); ts.add(new Student("abc2")); ts.add(new Student("abc3")); */
相关文章推荐
- 黑马程序员——java 泛型学习笔记
- 黑马程序员_泛型学习笔记
- 黑马程序员_学习笔记第15天——TreeSet、泛型
- 黑马程序员----Java集合框架学习笔记2 Map-工具类-泛型
- 黑马程序员—Java基础加强学习笔记之泛型
- 黑马程序员--Java基础学习笔记【集合-List、泛型】
- 黑马程序员.net学习笔记3----泛型。
- 黑马程序员学习笔记——泛型的反射
- 黑马程序员________Java集合Map及其JDK1.5新特性泛型机制的学习笔记
- 黑马程序员-集合和泛型集合-学习笔记
- 黑马程序员-java学习笔记-泛型
- 黑马程序员----泛型学习笔记
- 黑马程序员_学习笔记:11) Jdk5.0新特性:增强for循环、可变参数(...)、静态导入、枚举:关键字 enum、自动拆装箱、泛型
- 黑马程序员—15—java基础:有关泛型的学习笔记和学习心得体会
- 黑马程序员_泛型之学习笔记
- 黑马程序员---java学习笔记之泛型
- 黑马程序员学习笔记之五(java中的泛型)
- 黑马程序员java学习笔记——正则表达式、反射
- 黑马程序员—java中的Scanner类学习笔记
- 黑马程序员 JAVA学习笔记 ——— 多线程