我又來更新啦~
思路有點混亂,請多多指教!!
什麼是泛型:
只存在於編譯期,運行期類型參數被擦除,由於運行期間的類型參數被擦除,所以可以通過
其他的引用將被任何類型的對象扔到dogBox中,通過了編譯,運行期間也沒有拋出異常。
Box<Dog> dogBox=new Box<Dog>();
//java泛型只存在於編譯期,運行期沒有類型信息,類型參數被擦除爲Object類型
//兩個引用指向同一個箱子
Box box=dogBox;
//成功的在運行期講一個動物對象放入了狗箱子
box.setT(new Animal("hello"));
//成功的在運行期將字符串對象放入了狗箱子
box.setT("hello world");
System.out.println(box.getT());
引入泛型:
package moretape;
public class Box {
private Object object;
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Box b=new Box();
b.setObject("123");
b.getObject();
Box c=new Box();
c.setObject(123);
c.getObject();
}
}
1. 泛型不能是基本數據類型,因爲基本數據類型不是類,但可以是封裝類。
public class Box<T> {
private T t;
public T getObject() {
return t;
}
public void setObject(T t) {
this.t = t;
}
public static void main(String[] args) {
Box<String> b=new Box<String>();
b.setObject("123");
b.getObject();
}
}
這裏補充一下什麼是基本數據類型,基本數據類型對應的類
基本數據類型對應的類 基本數據類型
1.Boolean boolean
2.Character char
3.Short short
4.Byte byte
5.Integer int
6.Long long
7.Float float
8.Double double
9.BigDecimal 用於精確計算(用來表示錢數的)
java中數據類型分爲兩種,一種是基本數據類型,一種是引用數據類型。
2. 泛型支持類型的自動傳遞,Box<String> b=new Box<>();
public class Box<T> {
private T t;
public T getObject() {
return t;
}
public void setObject(T t) {
this.t = t;
}
public static void main(String[] args) {
Box<String> b=new Box<String>();
b.setObject("123");
b.getObject();
Box<Integer> c=new Box<Integer>();
c.setObject(123);
c.getObject();
Box<Double> d=new Box<>();
d.setObject(12.23);
d.getObject();
}
}
使用泛型不需要進行類型強制轉換,並且使用時基本不會出現類型轉換錯誤。
泛型的參數類型可以是多個的
例如
public class Person<T,Y,X>(){}
可以限制類型的選取範圍,通過extends,<T extends animal>
那麼選取的類型只能比animal小,不能比他大。
泛型不支持協變和逆變,數組支持
由小類型轉化位大類型叫做協變
由大類型轉化爲小類型叫做逆變
另外還有不經常使用的通配符格式
下面這個是隻能用get方法,不能用set方法:
Box<? extends Animal> animalBox=new Box<Dog>();
這個是隻能用set方法,不能用get方法:
Box<? super Courser> courserBox=new Box<Courser>();
下面是java泛型的限制: