您的位置:首页 > 其它

<泛型>的认识

2017-07-28 22:29 141 查看
main 方法中:

Arraylist<Person> l=new Arraylist<Person>();   // 确定类型  集合只能存放Person对象

al.add(new Person("zhangsan",20)); //不会报错

//al.add("aaa");      //报错

//al.add(new Dog())  //报错

//加了泛型   迭代器不需要强转了

Iterator<Person>iterator=al.iterator();

while(iterator.hasNext()){

syso(iterator.next().name);

}

class Person{
String name;
int age;
//构造方法
public Person(String name,int age){
super();
this.name=name;
this.age=age;
}

}

class Dog{

}

*******************************************************

*

 * 三个工厂

 * 一个工厂只能实习生

 * 一个工厂只能工人

 * 一个工厂只能老板

 * 

 * 当类型不确定时,想起泛型

 * 

 * 1.泛型在类中的体现, 类在创建对象的时候把类型确定下来

 * 2.泛型在方法中的体现

 * 3.泛型在静态方法中的体现,不能去访问类中的泛型 

 * 4.泛型在接口上的体现 

 * 要么在实现类的时候确定,要么在创建对象的时候确定

 

 * ******

 *******************************************************************

 * ******在设计类或者接口或方法时,如果类型不确定的时候,使用泛型***

 * ******    但是在使用的时候一定要确定类型,默认会认为object    ***

 * */***************************************************************

public class Demo2 {

public static void main(String[] args) {
//创建对象的时候 student 传给下面的<T>   所以<S>不是Student(泛型在方法中的体现)
//类型传的Student  确定类型 <T>是 <Student>
Factory<Student> f1 = new Factory<Student>();

f1.add(new Student());//只能传Student
//类型传的是<Worker> 
Factory<Worker> f2 = new Factory<Worker>();

f2.add(new Worker());
//这个add1 传的可以就不是Worker类型   所以不报错   (因为泛型在方法中的应用)
f2.add1(new Student());

//泛型在接口中的体现
InterImpl<Worker> ii = new InterImpl();

}

}

//类型不确定的时候 写大写<T>  传什么就是什么↑↑↑

class Factory<T>{

public void add(T t){

}
//这个S不是student  对应上面的add1 可以不用类泛型指定的类型
public  <S>  void add1(S s){
T t;  //不会报错  可以访问类中的泛型
}
//泛型在静态方法中的体现,不能去访问类中的泛型
public static <S> void add1(S s){
T t;
}

}

class Worker{}

class Student{}

class Boss{}

//泛型在接口中的体现 

interface Inter<T>{
void add(T t);

}

class InterImpl<T> implements Inter<T>{

@Override
public void add(T t) {

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: