⑴ java泛型有什麼作用泛型是實泛型還是偽泛型
泛型好處:
泛型簡單易用
類型安全 泛型的主要目標是實現java的類型安全。 泛型可以使編譯器知道一個對象的限定類型是什麼,這樣編譯器就可以在一個高的程度上驗證這個類型
消除了強制類型轉換 使得代碼可讀性好,減少了很多出錯的機會
Java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查類型安全,並且所有的強制轉換都是自動和隱式的,提高代碼的重用率。
泛型的實現原理
泛型的實現是靠類型擦除技術 類型擦除是在編譯期完成的 也就是在編譯期 編譯器會將泛型的類型參數都擦除成它的限定類型,如果沒有則擦除為object類型之後在獲取的時候再強制類型轉換為對應的類型。 在運行期間並沒有泛型的任何信息,因此也沒有優化。
泛型不考慮繼承
List 類型 是否 可以 賦值為 List類型 ?
答案是不可以的
雖然說在賦值之後 String類型可以當做 Object類型使用 但是還是會出現問題
參考:《2020最新Java基礎精講視頻教程和學習路線!》
⑵ 請教java List 泛型轉換
如:List<String> list = new ArrayList<String>(); list.add("1");
list.add("2");
採用泛型寫法後,list想加入一個Integer類型的對象時會出現編譯錯誤,通過List<String>,直接限定了list集合中只能含有String類型的元素,從而在後續如果進行for循環就無須進行強制類型轉換,因為此時,集合能夠記住元素的類型信息,編譯器已經能夠確認它是String類型了。
⑶ java中泛型的使用
泛型可以避免強制類型轉換,設定集合對象中存儲的對象類型。
比如List<String> list = new ArrayList<String>();
那在這個list中,只能存儲字元串對象。
⑷ java泛型轉換
可以,在代碼里強制轉換即可
但是你要確定object確實是T類型的,否則會轉換失敗拋異常
⑸ java中什麼是泛型,怎麼用泛型
最簡單的運用:List<String> list = new ArrayList<String>();
這個是什麼意思?
意思就是list只裝String類型的數據,別的,裝不進去
然後你就會覺得這個好像有點封裝的意思,比如LIst<Student>,封裝學生類
所以,所謂泛型就是廣泛的數據類型,你可以把它理解成封裝
⑹ 關於java泛型集合轉換問題,下圖是List<String>類型數據,求問怎麼轉換為List<T>類型
public class Test {
public static void main(String[] args){
List<A> list = new ArrayList<A>();
A a1 = new A("101","01","122222222","上海");
A a2 = new A("102","02","133333333","南京");
A a3 = new A("103","03","142333223","上海");
A a4 = new A("104","04","125555552","上海");
list.add(a1);
list.add(a2);
list.add(a3);
list.add(a4);
}
}
class A{
private String ID;
private String num;
private String iphone;
private String address;
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getIphone() {
return iphone;
}
public void setIphone(String iphone) {
this.iphone = iphone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public A(String id,String num,String iphone,String address){
this.ID = id;
this.num = num;
this.iphone = iphone;
this.address=address;
}
}
我寫了個例子,應該能明白了吧?也就是吧你集合的數據封裝成一個對象,這樣泛型的時候就可以泛型成這個對象了。A也就是你說的T 這樣就是你要的把數據封裝成了A類對象
希望能幫到你!
⑺ 為什麼java中用了泛型之後就不要強制轉換了呢
java泛型是java5以後才出現的,泛型中,你已經設定了數據類型,所以是無法進行強類型轉換的。例如:List<String> list=new ArrayList<String>();已經告訴程序我的這個list裡面存放的是String類型的數據,如果你在做強類型轉化,系統就會判定無法進行類型轉化。
⑻ java泛型有研究的進來,java List<string>轉換成string對象
都使指定泛型是String了就不用轉型了。
比如
List<String> list=new ArrayLIst<String)();
list.add("aaaa");
String s=list.get(0);
就行了 注意String 的S大寫。
⑼ java中泛型怎麼強制轉換
首先你的問題得明確一些
如果把List<B>轉成B,則不用轉,直接B b = list.get(2)。
如果把List<B>轉成A,也不需要強制轉換,因為A是B的父類。父類的引用可以直接指向之類的對象,而不需要強制轉換。A a = list.get(2);就可以完成。
如果把List<A>轉成B,這需要強制轉換。也很簡單B b = (B)list.get(2);但是,前提是,當你把對象裝入List<A> list的時候,你必須實例化B對象,否則會報錯!
以下是第三種不會報錯情況的代碼,比較簡陋,但運行正確,分析原理足矣!
package a;
import java.util.ArrayList;
import java.util.List;
public class A {
public int sign = 1;
public List<A> getList(){
List<A> l = new ArrayList<A>();
for(int i=0;i<5;i++){
l.add(new A(i));
}
return l;
}
public A(int s){
this.sign = s;
}
}
package a;
import java.util.ArrayList;
import java.util.List;
public class B extends A {
public B(int s) {
super(s);
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
B b = new B(1);
List<A> list = b.getList();
for(int i=0;i<5;i++){
A a = list.get(i);
B bb = (B)list.get(i);
System.out.println("A:"+a.sign+" B:"+bb.sign);
}
}
public List<A> getList(){
List<A> l = new ArrayList<A>();
for(int i=0;i<5;i++){
l.add(new B(i));
}
return l;
}
}
樓主可以把B中的new B(i)改成new A(i) ,編譯不報錯,運行就會錯了!