『壹』 泛型:什麼是java泛型

泛型用的時候常用,解釋么,還是去查看了下相關資料
比如List裡面什麼數據類型都是可以放的,但你規定了泛型之後,創建的List就只能存放你規定的對象。比如List = new ArrayList();這時候list裡面存放類型是未知的,可以放任意對象
但List<User> user=new ArrayList<User>(); 後,users裡面就只能存放User對象了。

『貳』 如何取得java泛型里的類型

子父類的方式獲取泛型,剛剛寫的代碼,參考一下。



importjava.lang.reflect.ParameterizedType;
importjava.lang.reflect.Type;
/**
*
*開發公司:SOJSON在線工具<p>
*版權所有:©www.sojson.com
*博客地址:http://www.sojson.com/blog/
*<p>
*
*注釋寫這里
*
*<p>
*
*區分責任人日期說明<br/>
*創建周柏成2017年4月13日09:49<br/>
*
*@authorzhou-cheng
*@[email protected]
*@version1.0,2017年4月13日09:49<br/>
*
*/
publicclassDemo2<T,M>{

/**
*這里是子類,寫在一個文件里,方便調用,static修飾是為了和當前類同級
*@authorAdministrator
*
*/
<SunDemo,Demo2>{

}


publicDemo2(){
Typetype=getClass().getGenericSuperclass();
if(){
Type[]entityClass=((ParameterizedType)type).getActualTypeArguments();
System.out.println("獲取的泛型類型:");
for(Typet:entityClass){
Classclazz=(Class)t;
System.out.println(clazz.getCanonicalName());
}
}
}
/**
*通過實例化子類,父類獲取。
*@paramargs
*/
publicstaticvoidmain(String[]args){
newSunDemo();
}
}

『叄』 java泛型介面是怎麼一回事,干什麼用的

現在也可以用object類型,但是返回值的時候你要把object類型擦除,強制轉換為具體類型,小項目看不出弊端,但是項目一大就不太方便,如果沒有泛型機制,系統不會幫忙檢查類型裝換,這就需要程序員自己記住大量數據轉換,還很容易類型裝換錯誤帶來的種種bug,好比你拿著一疊錢買菜,沒有泛型的話,你要親自一樣一樣的買,有泛型的話,你相當有一部機器,可以把你需要的一次性給你,就是不用自己親力親為,省力還少bug。同樣的路,有人搭飛機,有人步行,就這區別。

『肆』 java中 如何得到泛型參數的類型,並在另一個方法中使用

publicclassB{
public<TextendsB>Tset(Tt)
{
returnt;//這里接受到return回去。
}

public<T>voidget()
{
//注意這里String不是B的子類,會報錯。
Tt=(T)set(newString());
}
}

『伍』 java泛型類的定義和使用

泛型就是在類後面打個尖括弧
然後裡面限制了它的類型

『陸』 如何獲取java泛型的參數類型

一般可以使用反射來獲取泛型參數的實際類型,以下是詳細代碼:
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;

public class GenericTest {
/*使用反射來獲取泛型信息*/
private Map<String, Integer> score;
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
//Class clazz = GenericTest.class;
Class<GenericTest> clazz = GenericTest.class;
//System.out.println(clazz);
Field f = clazz.getDeclaredField("score");

//直接使用getType只對普通類型有效,無法取到泛型參數
Class<?> a = f.getType();
System.out.println("score的類型是:"+a);

//獲得Field實例f的泛型類型
Type gType = f.getGenericType();
//如果gType類型是ParameterizedType的對象
if (gType instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) gType;
//獲取原始類型
Type rType = pType.getRawType();
System.out.println("原始類型是:"+rType);
//取得泛型類型參數
Type[] tArgs = pType.getActualTypeArguments();
System.out.println("泛型類型是:");
for (int i = 0; i < tArgs.length; i++) {
System.out.println("第"+i+"個泛型類型是:"+tArgs[i]);
}
}else{
System.out.println("獲取泛型類型出錯!");
}
}
}
輸出結果如下:
score的類型是:interface java.util.Map
原始類型是:interface java.util.Map
泛型類型是:
第0個泛型類型是:class java.lang.String
第1個泛型類型是:class java.lang.Integer

『柒』 java泛型轉換

輸入一個Object類型的數據 和 轉型的類型的話可以實現,比如publicstatic<T>Tget(Objecto,Class<T>clazz)

當然<T> T f1(Object o,T c){ 也行的 只是需要通過c獲得一次類的Class,

publicstatic<T>Tget(Objecto,Class<T>clazz){
if(clazz!=null){
if(clazz.isInstance(o))
returnclazz.cast(o);
else
thrownewRuntimeException(o+"isnota"+clazz.getName());
}
returnnull;
}

publicstatic<T>Tget(Objecto,Tt){
Class<T>clazz=(Class<T>)t.getClass();
if(clazz!=null){
if(clazz.isInstance(o))
returnclazz.cast(o);
else
thrownewRuntimeException(o+"isnota"+clazz.getName());
}
returnnull;
}

『捌』 java泛型中 <Object>是對象類型 <T>代表什麼類型 能否把所有泛型的簡寫介紹小

看來你對泛型的理解還有點誤差
首先,泛型是一種機制,<>裡面的參數必須是包裝類;
其次,<>裡面的參數可以用具體的類來表示,比如Object,String;也可以使用隨意的一個符號來表示,比如T,他表示他可以接受所以的類型;
第三,所有的泛型?泛型不分種類,只是<>裡面的參數不同而已

『玖』 為什麼要用Java泛型

從上面的內容中,大家已經明白了泛型的具體運作過程。也知道了介面、類和方法也都可以使用泛型去定義,以及相應的使用。是的,在具體使用時,可以分為泛型介面、泛型類和泛型方法。

自定義泛型介面、泛型類和泛型方法與上述Java源碼中的List、ArrayList類似。如下,我們看一個最簡單的泛型類和方法定義:

由此,我們發現,在使用泛型類時,雖然傳入了不同的泛型實參,但並沒有真正意義上生成不同的類型,傳入不同泛型實參的泛型類在內存上只有一個,即還是原來的最基本的類型(本實例中為Box),當然,在邏輯上我們可以理解成多個不同的泛型類型。

究其原因,在於Java中的泛型這一概念提出的目的,導致其只是作用於代碼編譯階段,在編譯過程中,對於正確檢驗泛型結果後,會將泛型的相關信息擦出,也就是說,成功編譯過後的class文件中是不包含任何泛型信息的。泛型信息不會進入到運行時階段。

對此總結成一句話:泛型類型在邏輯上看以看成是多個不同的類型,實際上都是相同的基本類型。

『拾』 java泛型為什麼不支持原始類型

你說的是類似這樣的吧:
List<int> list=new ArrayList<int>();//這里,這樣是錯誤的
list.add(0);
list.add(1);
泛形要求能包容的是對象類型,而基本類型在java里不屬於對象。但是基本類型都有其包裝類型,也就是對象類型:
int->Integer
long->Long
....
那麼你要想存放基本類型就用其包裝類型去實現功能:
List<Integer> list=new ArrayList<Integer>();
list.add(0);
list.add(1);

你說的自動封箱是在對基本類形和包裝類型操作的時候才有的,比如你直接把兩個Integer類型的數據相加,在jdk1.5之前是不允許的。而泛型和自動封箱沒有關系。