java泛型

我又來更新啦~

思路有點混亂,請多多指教!!

 

什麼是泛型:

只存在於編譯期,運行期類型參數被擦除,由於運行期間的類型參數被擦除,所以可以通過

其他的引用將被任何類型的對象扔到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泛型的限制:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章