黑马程序员-学习日记(泛型)
2014-11-24 09:37
232 查看
[b] ------Java EE培训、Android培训、iOS培训、期待与您交流! -------[/b]
![](http://images.cnitblog.com/blog/695570/201411/240942103404814.png)
tool t = new tool();
t.setObj(new Stu("Hynix"));
Worker w = (Worker)t.getObj();//通过编译、但运行时报错
![](http://images.cnitblog.com/blog/695570/201411/241028042774138.png)
![](http://images.cnitblog.com/blog/695570/201411/241031539181881.png)
![](http://images.cnitblog.com/blog/695570/201411/241032589495148.png)
Java早期无泛型,因此传入集合的就是Object对象,取出时就必须要对Object进行强转。
Utils u = new Utils<Worker>();
u.setObject(new Stu("Jacky"));//在编译时就会报错
Worker w = u.getObject();
![](http://images.cnitblog.com/blog/695570/201411/241132232469266.png)
因此,什么时候定义泛型类?在类中要操作的引用数据类型不确定的时候。以前定义Object来完成扩展,现在就定义泛型来完成扩展。
泛型限定
import java.util.*; class GD6 { public static void main(String[] args) { ArrayList<Person> al = new ArrayList<Person>(); al.add(new Person("a")); al.add(new Person("b")); al.add(new Person("c")); Iterator<Person> it = al.iterator(); while(it.hasNext()) { Person p = it.next(); System.out.println(p); } ArrayList<Stu> al1 = new ArrayList<Stu>(); al1.add(new Stu("A")); al1.add(new Stu("B")); al1.add(new Stu("C")); printCln(al1); } public static void printCln(ArrayList<? extends Person> al) { Iterator<? extends Person> it = al.iterator(); while(it.hasNext()) { System.out.println(it.next().getName()); } } }
![](http://images.cnitblog.com/blog/695570/201411/240942103404814.png)
class Person { String name; String getName() { return this.name; } Person(String name){ this.name = name; } } class Worker extends Person { Worker(String name) { super(name); } } class Stu extends Person { String name; Stu(String name) { super(name); } } class tool { private Object obj; public void setObj(Object obj) { this.obj = obj; } public Object getObj() { return obj; } }
tool t = new tool();
t.setObj(new Stu("Hynix"));
Worker w = (Worker)t.getObj();//通过编译、但运行时报错
![](http://images.cnitblog.com/blog/695570/201411/241028042774138.png)
![](http://images.cnitblog.com/blog/695570/201411/241031539181881.png)
![](http://images.cnitblog.com/blog/695570/201411/241032589495148.png)
Java早期无泛型,因此传入集合的就是Object对象,取出时就必须要对Object进行强转。
class Utils<F> { private F f; public void setObject(F f) { this.f = f; } public F getObject() { return f; } }
Utils u = new Utils<Worker>();
u.setObject(new Stu("Jacky"));//在编译时就会报错
Worker w = u.getObject();
![](http://images.cnitblog.com/blog/695570/201411/241132232469266.png)
因此,什么时候定义泛型类?在类中要操作的引用数据类型不确定的时候。以前定义Object来完成扩展,现在就定义泛型来完成扩展。
class Demo<T> { public <T> void show(T t) { System.out.println("show:"+t); } public <Q> void print(Q q) { System.out.println("print:"+q); } } class GenericDemo4 { public static void main(String[] args) { Demo d = new Demo(); d.show("hello"); d.show(new Integer(4)); d.print("hi"); } }
泛型限定
通配符<?>,也可以理解为占位符号 ? extends E:可以接受E类型或者E的子类型 上限 <? extends E> ? super E:可以接受E或E的父类型 下限 <? super E> 上限什么时候用:往集合中添加元素时,既可以添加E类型对象,又可以添加E的子类型对象。为什么?因为取的时候, E类型既可以接收E类对象,又可以接收E的子类型对象。? 下限什么时候用:当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收。
import java.util.*; class Gd12 { public static void main(String[] args) { TreeSet<Worker> ts = new TreeSet<Worker>(new comp()); ts.add(new Worker("a")); ts.add(new Worker("b")); ts.add(new Worker("c")); TreeSet<Student> ts1 = new TreeSet<Student>(new comp()); ts1.add(new Student("e")); ts1.add(new Student("d")); ts1.add(new Student("f")); Iterator<Worker> it = ts.iterator(); while(it.hasNext()) { System.out.println(it.next().getName()); } } } 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 Worker extends Person { Worker(String name) { super(name); } } class comp implements Comparator<Person> { public int compare(Person p1,Person p2) { return p2.getName().compareTo(p1.getName()); } }
相关文章推荐
- 黑马程序员_学习日记十六_基础加强之泛型、类加载器
- 黑马程序员——学习日记之泛型和集合框架工具类
- 黑马程序员_学习日记65_713ASP.NET(委托、托管、扩展方法、泛型委托、进程_应用程序域_线程、多线程、异步委托)
- 黑马程序员_JAVA学习日记_JAVA中的泛型
- 黑马程序员_学习日记39_604基础加强(垃圾回收、弱引用、集合ArrayList和Hashtable、泛型集合List和Dictionary、var)
- 黑马程序员--集合框架知识总结和泛型--java学习日记7(基础知识)
- 黑马程序员_Java学习日记9_泛型
- 黑马程序员_学习日记7_C#基础归纳总结之泛型
- 黑马程序员_学习日记40_605基础加强(自定义泛型、装拆箱、foreach、文件操作、字符串与byte数组转换)
- 黑马程序员Java基础加强49-56学习日记
- 黑马程序员张毓庆的学习日记第五篇
- 黑马程序员张毓庆的学习日记第二篇
- 黑马程序员张毓庆的学习日记第七篇
- 黑马程序员张毓庆的学习日记第六篇
- 黑马程序员 交通灯管理学习日记
- 黑马程序员张毓庆的学习日记第十一篇
- 黑马程序员-------学习日记Java基础 第二天
- 黑马程序员-------学习日记Java基础 第一天
- 黑马程序员张毓庆的学习日记第九篇
- 黑马程序员 网络编程学习日记