導航:首頁 > 編程語言 > java泛型的類型轉換

java泛型的類型轉換

發布時間:2022-07-29 22:53:05

java中的泛型套泛型有沒有方法方便地向下轉換

類型是對應的,可以強制轉換

~~~~~~

⑵ java中泛型的使用

泛型可以避免強制類型轉換,設定集合對象中存儲的對象類型。
比如List<String> list = new ArrayList<String>();
那在這個list中,只能存儲字元串對象。

⑶ 關於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,泛型問題和Object,類型轉換問題

簡單點說,不扯那些書上的,弱類型語言無類型,高級語言有類型,每個類型有自己的方法,這里就說java,java基本數據類型有8中,對應的包裝類也是有方法的,比如int對應的Integer,按你說的統一就Object類型,那麼每個類型都有自己的方法,你都用Object方法要怎麼用?你可以如果我要用String,那麼我就把Object轉換為String,可是往往寫代碼的時候,你還不知道未來那個數據是什麼類型,這種情況也是有的,再說泛型,泛型這個東西簡單來說就是在編譯期間確定類型,這樣IDE可以幫你檢查類型,舉例一個集合List,這里以前是可以裝任何Object的,有了泛型以後,我們可以這樣List<String>意思說這里的集合我只能裝字元串類型,否則編譯時就過不去,這樣的好處是你內心知道這里只是字元串,未來在從集合中獲取一個對象時,直接就可以用字元串的方法,而不是拿出Object在轉換,並且如果只是單純的List集合,你如何確定代碼裝入集合中的對象就一定是字元串,倘若很復雜的代碼,裡面不小心裝入的Integer對象,也很難檢測,恐怕只有運行報錯的時候你才知道,最後要說泛型只存在於編譯期間,編譯過後泛型擦除!

⑸ 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) ,編譯不報錯,運行就會錯了!

⑹ 如何理解Java的泛型


型(Generic type 或者 generics)是對
簡單的理解,就是對類型的參數化,比如我們定義一個類屬性或者實例屬性時,往往要指定具體的類型,如Integer、Person等等,
但是如果使用了泛型,我們把這些具體的類型參數化,用一個廣泛的可以表示所有類型的「類型」T來定義,那這個T就是泛型的表示。

可以在集合框架(Collection framework)中看到泛型的動機。例如,Map 類允許您向一個 Map 添加任意類的對象,即使最常見的情況是在給定映射(map)中保存某個特定類型(比如 String)的對象。

因為 Map.get() 被定義為返回 Object,所以一般必須將 Map.get() 的結果強制類型轉換為期望的類型,如下面的代碼所示:

[java]view plainprint?

⑺ java中的泛型 求詳細解釋

1、Java泛型
其實Java的泛型就是創建一個用類型作為參數的類。就象我們寫類的方法一樣,方法是這樣的method(String str1,String str2 ),方法中參數str1、str2的值是可變的。而泛型也是一樣的,這樣寫class Java_Generics<K,V>,這里邊的K和V就象方法中的參數str1和str2,也是可變。下面看看例子:
//code list 1
import Java.util.Hashtable;
class TestGen0<K,V>{
public Hashtable<K,V> h=new Hashtable<K,V>();
public void put(K k, V v) {
h.put(k,v);
}
public V get(K k) {
return h.get(k);
}
public static void main(String args[]){
TestGen0<String,String> t=new TestGen0<String,String>();
t.put("key", "value");
String s=t.get("key");
System.out.println(s);
}
}
正確輸出:value
這只是個例子(Java中集合框架都泛型化了,這里費了2遍事.),不過看看是不是創建一個用類型作為參數的類,參數是K,V,傳入的「值」是String類型。這個類他沒有特定的待處理型別,以前我們定義好了一個類,在輸入輸入參數有所固定,是什麼型別的有要求,但是現在編寫程序,完全可以不制定參數的類型,具體用的時候來確定,增加了程序的通用性,像是一個模板。
呵呵,類似C++的模板(類似)。
1.1. 泛型通配符
下面我們先看看這些程序:
//Code list 2
void TestGen0Medthod1(List l) {
for (Object o : l)
System.out.println(o);
}
看看這個方法有沒有異議,這個方法會通過編譯的,假如你傳入String,就是這樣List<String>。
接著我們調用它,問題就出現了,我們將一個List<String>當作List傳給了方法,JVM會給我們一個警告,說這個破壞了類型安全,因為從List中返回的都是Object類型的,而讓我們再看看下面的方法。
//Code list 3
void TestGen0Medthod1(List<String> l) {
for (Object o : l)
System.out.println(o);
}
因為這里的List<String>不是List<Object>的子類,不是String與Object的關系,就是說List<String>不隸屬於list<Object>,他們不是繼承關系,所以是不行的,這里的extends是表示限制的。
類型通配符是很神奇的,List<?>這個你能為他做什麼呢?怎麼都是「?」,它似乎不確定,他總不能返回一個?作為類型的數據吧,是啊他是不會返回一個「?」來問程序員的?JVM會做簡單的思考的,看看代碼吧,更直觀些。
//code list 4
List<String> l1 = new ArrayList<String>();
li.add(「String」);
List<?> l2 = l1;
System.out.println(l1.get(0));
這段代碼沒問題的,l1.get(0)將返回一個Object。
1.2. 編寫泛型類要注意:
1) 在定義一個泛型類的時候,在 「<>」之間定義形式類型參數,例如:「class TestGen<K,V>」,其中「K」 , 「V」不代表值,而是表示類型。
2) 實例化泛型對象的時候,一定要在類名後面指定類型參數的值(類型),一共要有兩次書寫。例如:
TestGen<String,String> t=new TestGen<String,String>();
3) 泛型中<K extends Object>,extends並不代表繼承,它是類型範圍限制。
2、泛型與數據類型轉換
2.1. 消除類型轉換
上面的例子大家看到什麼了,數據類型轉換的代碼不見了。在以前我們經常要書寫以下代碼,如:
//code list 5
import Java.util.Hashtable;
class Test {
public static void main(String[] args) {
Hashtable h = new Hashtable();
h.put("key", "value");
String s = (String)h.get("key");
System.out.println(s);
}
}
這個我們做了類型轉換,是不是感覺很煩的,並且強制類型轉換會帶來潛在的危險,系統可能會拋一個ClassCastException異常信息。在JDK5.0中我們完全可以這么做,如:
//code list 6
import Java.util.Hashtable;
class Test {
public static void main(String[] args) {
Hashtable<String,Integer> h = new Hashtable<String,Integer> ();
h.put("key", new Integer(123));
int s = h.get("key").intValue();
System.out.println(s);
}
}
這里我們使用泛化版本的HashMap,這樣就不用我們來編寫類型轉換的代碼了,類型轉換的過程交給編譯器來處理,是不是很方便,而且很安全。上面是String映射到String,也可以將Integer映射為String,只要寫成HashTable<Integer,String> h=new HashTable<Integer,String>();h.get(new Integer(0))返回value。果然很方便。

⑻ java 泛型轉換問題

不能直接轉,bs = as;如果這個能轉的話證明bs和as的類型一致,或者它們兩個直接有繼承關系,但是ArrayList<A>與ArrayList<B>之間並不存在類型一致或者繼承的關系,所以不能直接轉換。只能通過其他方法實現

⑼ 請教java List 泛型轉換

如:List<String> list = new ArrayList<String>(); list.add("1");
list.add("2");
採用泛型寫法後,list想加入一個Integer類型的對象時會出現編譯錯誤,通過List<String>,直接限定了list集合中只能含有String類型的元素,從而在後續如果進行for循環就無須進行強制類型轉換,因為此時,集合能夠記住元素的類型信息,編譯器已經能夠確認它是String類型了。

閱讀全文

與java泛型的類型轉換相關的資料

熱點內容
微信位置可以加密嗎 瀏覽:466
演算法蠻力法 瀏覽:436
隨機排練命令 瀏覽:147
python多進程並發 瀏覽:41
安卓軟體安裝如何躲避安全檢測 瀏覽:647
奇幻潮翡翠台源碼百度雲盤 瀏覽:187
什麼軟體可以免費pdf轉word 瀏覽:15
php正則表達式大全 瀏覽:394
androidntp時間 瀏覽:299
輪機長命令簿英文 瀏覽:148
oppo鈴聲設置被加密怎麼處理 瀏覽:548
粵苗app圖形驗證碼怎麼填 瀏覽:899
管家婆架設雲伺服器 瀏覽:254
php的登錄界面代碼 瀏覽:997
php開發客戶端 瀏覽:998
theisle測試服怎麼搜伺服器 瀏覽:447
廣播PDF 瀏覽:218
單片機編程300例匯編百度 瀏覽:35
騰訊雲連接不上伺服器 瀏覽:223
不能用來表示演算法的是 瀏覽:861