<泛型>的認識


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) {


}




}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com