❶ 什麼是泛型
泛型。即通過參數化類型來實現在同一份代碼上操作多種數據類型。泛型是在C#2.0引入的。泛型(Genericity)的字面意思是指具有在多種數據類型上皆可操作的含意,與模板有些相似。
泛型是程序設計語言的一種特性。允許程序員在強類型程序設計語言中編寫代碼時定義一些可變部分,那些部分在使用前必須作出指明。各種程序設計語言和其編譯器、運行環境對泛型的支持均不一樣。
優點:
泛型方法可以出現在泛型或非泛型類型上。需要注意的是,並不是只要方法屬於泛型類型,或者甚至是方法的形參的類型是封閉類型的泛型參數,就可以說方法是泛型方法。只有當方法具有它自己的類型參數列表時,才能稱其為泛型方法。在下面的代碼中,只有方法 G 是泛型方法。
❷ java中什麼是泛型,怎麼用泛型
最簡單的運用:List<String> list = new ArrayList<String>();
這個是什麼意思?
意思就是list只裝String類型的數據,別的,裝不進去
然後你就會覺得這個好像有點封裝的意思,比如LIst<Student>,封裝學生類
所以,所謂泛型就是廣泛的數據類型,你可以把它理解成封裝
❸ 如何理解Java的泛型
泛
型(Generic type 或者 generics)是對
簡單的理解,就是對類型的參數化,比如我們定義一個類屬性或者實例屬性時,往往要指定具體的類型,如Integer、Person等等,
但是如果使用了泛型,我們把這些具體的類型參數化,用一個廣泛的可以表示所有類型的「類型」T來定義,那這個T就是泛型的表示。
可以在集合框架(Collection framework)中看到泛型的動機。例如,Map 類允許您向一個 Map 添加任意類的對象,即使最常見的情況是在給定映射(map)中保存某個特定類型(比如 String)的對象。
因為 Map.get() 被定義為返回 Object,所以一般必須將 Map.get() 的結果強制類型轉換為期望的類型,如下面的代碼所示:
[java]view plainprint?
Mapm=newHashMap();
m.put("key","value");
Strings=(String)m.get("key");
❹ Java中的泛型的問題
public BaseDao(){
Class clazz=this.getClass(); //通過當前對象(this)獲取當前類
clazz.getGenericSuperclass(); //返回當前類的父類的Type
//轉換成有泛型的ParameterizedType類
ParameterizedType parameterizedType=(ParameterizedType)clazz.getGenericSuperclass();
//上面三句其實就是為了獲取BaseDao類本身
Type[] types = parameterizedType.getActualTypeArguments();
this.type=(Class<T>)types[0];
//上面兩句是獲取運行期的泛型類型,返回給當前對象(this)的type屬性
}
❺ 誰能解釋一下Java中Typeparameters的含義
ypeparameters:
泛型參數
一般意義上來說,泛型是一種把相同的代碼重用在不同的類型上的技術。它作為一個相對獨立於其它面向對象特性的技術,在面向對象語言里已經變得越來越普遍了。我們這里之所以討論泛型,一是因為泛型這種技術本身就很讓人感興趣,另外,也是因為泛型是一個被用來對付二元方法問題(binarymethodproblem)的主要工具。
和subtyping共同使用,泛型可以用來解決一些在方法特化等場合由反協變帶來的類型系統的困難。考慮這樣一個例子:
我們有Person和Vegitarian兩種類型,同時,我們有Vegitable和Food兩種類型。而且,Vegitable<:Food.
ObjectTypePersonis
…
methodeat(food:Food);
end;
ObjectTypeVegetarianis
…
methodeat(food:Vegitable);
end;
這里,從常識,我們知道一個Vegitarian是一個人。所以,我們希望可以有Vegetarian<:Person.
不幸的是,因為參數是反協變的,如果我們錯誤地認為Vegetarian<:Person,根據subtype的subsumption原則,一個Vegetarian的對象就可以被當作Person來用。於是一個Vegetarian就可以錯誤地吃起肉來。
使用泛型技術,我們引入TypeOperator(也就是,從一個類型導出另一個類型,概念上類似於對類型的函數)。
ObjectOperatorPersonEating[F<:Food]is
…
methodeat(food:F);
end;
[F<:Vegetable]is
…
methodeat(food:F);
end;
這里使用的技術被稱作BoundedTypeParameterization.(Trelli/Owl,Sather,Eiffel,PolyTOIL,Raptide以及GenericJava都支持BoundedTypeParameterization.其它的語言,如C++,只支持簡單的沒有類型約束的泛型)
F是一個類型參數,它可以被實例化成一個具體的類型。類似於變數的類型定義,一個bound如F<:Vegitable限制了F只能被Vegitable及其子類型所實例化。所以,VegitarianEating[Vegitable],VegitarianEating[Carrot]都是合法的類型。而VegitarianEating[Beef]就不是一個合法的類型。類型VegitarianEating[Vegitable]是VegitarianEating的一個實例,同時它等價於類型Vegitarian.(我們用的是基於結構的subtype)
於是,我們有:
對任意F<:Vegitable,VegitarianEating[F]<:PersonEating[F]
對於原來的Vegitarian類型,我們有:
Vegetarian=VegetarianEating[Vegetable]<:PersonEating[Vegitable]
這種關系,正確地表達了「一個素食者是一個吃蔬菜的人」的概念。
除了BoundedTypeParameterization之外,還有一種類似的方法也可以解決這個素食者的問題。這種方法被叫做:BoundedAbstractType
請看這個定義:
ObjectTypePersonis
TypeF<:Food;
…
varlunch:F;
methodeat(food:F);
end;
ObjectTypeVegetarianis
TypeF<:Vegitable;
…
varlunch:F;
methodeat(food:F);
end;
這里,F<:Food的意思是,給定一個Person,我們知道他能吃某種Food,但我們不知道具體是哪一種。這個lunch的屬性提供這個Person所吃的Food.
在創建Person對象時,我們可以先選定一個Food的subtype,比如說,F=Dessert.然後,用一個Dessert類型的變數賦給屬性lunch.最後再實現一個eat(food:Dessert)的方法。
這樣,Vegetarian<:Person是安全的了。當你把一個Vegetarian當作一個Person處理時,這個Vegitarian可以安全地吃他自帶的午餐,即使你不知道他吃的是肉還是菜。
這種方法的局限在於,Person,Vegitarian只能吃他們自帶的午餐。你不能讓他們吃買來的午餐。
❻ Java里泛型有什麼作用我怎麼覺得那個可寫可不寫
泛型是java jdk1.5出的新功能。它主要是對同一種類型做的集合,有很多人說他不好用,但是sun既然提供了他就是讓我們來用的,這樣可以少些很多代碼。
❼ Java獲取泛型對象中的某個屬性值
首先做一個介面,介面中聲明需要的取值方法
然後做你要的實際的類,每個類實現不同的取值方法
然後list通過介面進行定義,將每個實際類的對象insert到list中間
然後利用多態實現動態的方法綁定,實現你的需求