注意:泛型类型必须是引用类型
泛型类,把泛型定义在类上
格式:public class 类名<泛型类型1,…>
把泛型定义在方法上
格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
class ObjectTool<T> {
private T obj;
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
}
泛型方法
class YEObjectTool {
public <T> void show(T t) {
System.out.println(t);
}
}
泛型接口
把泛型定义在接口上
格式:public interface 接口名<泛型类型1…>
interface YEInter<T> {
public abstract void show(T t);
}
实现类在实现接口的时候, 我们会遇到两种情况
第一种情况:已经知道是什么类型了
class YEInterImpl implements YEInter<String> {
@Override
public void show(String t) {
System.out.println(t);
}
}
第二种:还不知道是什么类型
class YEInterImpl2<T> implements YEInter<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
泛型高级(通配符)
- 泛型通配符 < ?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了 - ? extends E
向下限定,E及其子类 - ? super E
向上限定,E及其父类
//泛型如果明确的写的时候, 前后必须一致
Collection<Object> c1 = new ArrayList<Object>();
//? 表示任意的类型都是可以的
Collection<?> c5 = new ArrayList<Object>();
Collection<?> c6 = new ArrayList<Animal>();
Collection<?> c7 = new ArrayList<Dog>();
Collection<?> c8 = new ArrayList<Cat>();
// ? extends E:向下限定, E及其子类
Collection<? extends Animal> c10 = new ArrayList<Animal>();
Collection<? extends Animal> c11 = new ArrayList<Dog>();
// ? super E: 向上限定, E及其父类
Collection<? super Animal> c12 = new ArrayList<Object>();
Collection<? super Animal> C13 = new ArrayList<Animal>();
main函数中调用泛型类
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String> ();
list.add("hello");
list.add("world");
list.add("yongen");
// list.add(10);
System.out.println("list:====="+list);
Iterator<String> it = list.iterator();
while (it.hasNext()) {
//String s = (String) it.next();
String s = it.next();
System.out.println("s:======" + s);
}
=======================================================
============= 泛型类ObjectTool =================
=======================================================
ObjectTool<String > ot = new ObjectTool<String>();
ot.setObj("胡歌");
ot.setObj(new String("李宗伟"));
String s = ot.getObj();
System.out.println("姓名是:====" + s);
ObjectTool<Integer> ot2 = new ObjectTool<Integer>();
ot2.setObj(new Integer(10));
Integer i = ot2.getObj();
System.out.println("数字是:=====" + i);
=======================================================
================ 泛型方法 show ================
=======================================================
YEObjectTool yot = new YEObjectTool();
yot.show("Hello");
yot.show(100);
yot.show(true);
=======================================================
=============== 泛型接口 YEInter ===============
=======================================================
//第一种情况测试
YEInter<String> i13 = new YEInterImpl();
i13.show("hello");
//第二种情况测试
YEInter<String> i131 = new YEInterImpl2<String>();
i131.show("javaeerr");
YEInter<Integer> i132 = new YEInterImpl2<Integer>();
i132.show(120);
}
网友评论