泛型浅析
什么是泛型: 类型不缺定,所以我们加个泛型
早起我们用Object 来解决后面出现的对象的复用问题
后面泛型来了,一切都变得简单起来
class Worker
{
}
//来一工具类
class Util
{
private Object obj;
public void setObject(Object obj)
{
this.obj=obj;
}
public getObject()
{
return obj;
}
}
这样后面出现的无论什么类都能用这个util工具对象
我们引入泛型以后。哇靠!!!!!!传什么对象都能用
这就是使用泛型的好处。
class Person
{
}
class Student
{
}
class Util<T>
{
private T t;
private setObject(T t)
{
this.t=t;
}
private getObject()
{
return t;
}
}
注意:泛型是引用类型不确定,然后呢我们引入的泛型
泛型的三大表现形式
1.定义在类上
class Util<T>
{
private T t;
private setObject(T t)
{
this.t=t;
}
private getObject()
{
return t;
}
}
在整个类上有效
2.泛型你也可以定义在方法上
class Demo
{
public void show<T t>
{
System.out.println("show....."t);
}
}
3.泛型定义在接口上
一 在类实现的时候明确类型
interface Inter<T>
{
public void print(T t);
}
class InterInpl implements Inter<Student>
{
}
二.类在实现的时候也不确定,我们通过调用的时候确定
class InterInpl<T>implements Inter<T>{}
class Test
{
public static void main(String[] args)
{
InterInpl <String>in=new InterInpl<String>();
}
}
最后 介绍下泛型的高级应用
?:泛型占位符 用来接收任意类型,(在调用没有特有方法的时候 使用很方便)
比如
// 建立一个接收字符型类型的容器
ArrayList<String> al=new ArrayList<String>()
// 建立一个接收整形类型的容器
ArrayList<Integer> all=new ArrayList<Integer>()
//建立一个方法
public static void method(ArrayList<?> al){}
这样我们就可以接受任意类型 非常好用
?extends E//上线 接受E或者E的子类
? super E// 下线,接受E或者E的父类
import java.util.*;
class GenericDemo7
{
public static void main(String[] args)
{
ArrayList<Person> al=new ArrayList<Person>();
al.add(new Person("zhang"));
al.add(new Person("zhang1"));
al.add(new Person("zhang2"));
print(al);
}
public static void print(ArrayList<? extends Person> al)
{
for(Iterator<? extends Person> it=al.iterator();it.hasNext();)
{
System.out.println(it.next().getName());
}
}
}
class Person
{
private String name;
public Person(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
public Student(String name)
{
super(name);
}
}
浙公网安备 33010602011771号