1. java介面內定義泛型方法如何實現
介面 IHuman.java
public interface IHuman<K, V> {
V execute(K request) throws Exception;
}
實現 MaleHuman.java
public class MaleHuman implements IHuman<String, String> {
@Override
public String execute(String request) throws Exception {
return ...;
}
}
按照以上介面內的泛型方法,能進行子類實現也不會報錯。
但是介面內的泛型方法換種寫法,就不知道如何寫實現了。
介面 IHuman.java (改)
public interface IHuman {
<K, V> V execute(K request) throws Exception;
}
2. java 泛型介面
泛型的意思就是可以被當做多種類型。
先說class InterImpl implements Inter<String>{。。。}
這個類已經限定了,它只能處理Inter<String>這種情況,因為你已經明確化類型了。
你也可以這樣寫class InterImpl<String> implements Inter<String> {。。。},但是不好。
class InterImpl2<Q> implements Inter<Q>{...}
這個就挺好了,其中的Q可以是String,也可以是Integer等。第一個Q存在的原因是他也是泛型類,而這個Q所代表的跟他實現的Inter的泛型類型是相同的。而類中的Q是它所處理的類型。
3. java泛型的一些疑問
重點在
publicclassBeanListHandler<T>implementsIResultSetHandler<List<T>>
IResultSetHandler<List<T>>
來看IResultSetHandler的定義
<T>
你就可以看到定義中<>內就是泛型T,而實現IResultSetHandler時<>內的是List<T>。
所以呢對於IResultSetHandler介面來說,List<T>就是這個泛型對象,所以最後返回的也是一個list。
如果兩個相同的T對你產生了干擾,你可以把其中一個T改成K、V等等。
比如這樣
<K>{
Khandler(ResultSetset)throwsException;
}
這樣就更好理解了,實現類的List<T>就是K,返回的K就是返回List<T>
4. java 泛型借口類問題
ashtable中存任何類型的value 包括自定義的類
例如。有一個類是 class client{}
Hashtable<String ,client> ht = new Hashtable<String ,client>();
很方便的東西。讓你代碼更完美的。
=============================接話獻佛========================
應該是我很久沒有好好學技術了,有時候想用的時候卻發現不會寫,比如今天遇到了泛型介面,所以要記錄一下,這樣才能更明白...
在這里我並不想說泛型介面怎麼寫,這個很簡單,後面會寫的,只是想說我為什麼要用.
泛型介面的意圖是什麼?請看如下的問題:
Java代碼
abstract class BaseBean{
//略
}
Interface IA{
public BaseBean doSomething();
}
下面我們繼承這個BaseBean
Java代碼
class ChildBean extends BaseBean{
}
接下來實現介面
Java代碼
class IAImpl implements IA{
public BaseBean doSomething(){
return new ChildBean();
}
}
好了這是慣常的寫法,但是同學們有沒有發現一個問題當你返回得到BaseBean的時候其實你需要的是他的實例而不是這個真實的Bean,而當你強轉時又需要注意兩點: NullPoint 和 類型是否對,這個很麻煩,因為調用者完全不知道調用什麼.那麼我們來描述我們需要什麼:
我們需要IA的doSomething返回的是一個對象這個對象extends於BaseBean
那麼接下來我們就用泛型介面吧:
Java代碼
Interface IA<T extends BaseBean>{
public T doSomething();
}
class IAImpl implements IA<ChildBean>{
public ChildBean doSomething(){
return new ChildBean();
}
}
這樣當你調用這個實現的時候就能明確地得到返回的對象類型,清楚明了,這就是泛型介面的使用.其實我們平時一直在用的 Iterable就是這玩意大家可以去看下. 回家准備讀下java編程思想中的相關段落.
總結今天收獲很大,這里要感謝下靈芝同學給我的幫助,是她告訴了我,我所想要的東西叫泛型介面,感謝...
下次等我把泛型都再重新回爐下,再來把泛型的其他東西講來聽聽...
另外,團IDC網上有許多產品團購,便宜有口碑
5. java編程題:請按照下列提示編寫一個泛型介面以及其實現類
Generic.java:
package com.example.demo;
public interface Generic<T> {
void get(T t);
}
GenericImpl.java:
package com.example.demo;
public class GenericImpl<T> implements Generic<T> {
@Override
public void get(T t) {
}
}
6. Java泛型 繼承介面相關問題
當然正確。
FifoCache是一個泛型類,V由在創建此類的實例時指定具體類型,再傳給介面中的V,而介面interface Cache<K,V>中的K已顯式指定為String類型。因此,在創建此類的實例時,介面interface Cache<K,V>中的K,V都已指定了具體的類型,當然正確。
7. 泛型和數組以及Java是如何實現泛型的
要區分數組和泛型容器的功能,這里先要理解三個概念:協變性(covariance)、逆變性(contravariance)和無關性(invariant)。
若類A是類B的子類,則記作A ≦ B。設有變換f(),若:
當A ≦ B時,有f(A)≦ f(B),則稱變換f()具有協變性;
當A ≦ B時,有f(B)≦ f(A),則稱變換f()具有逆變性;
如果以上兩者皆不成立,則稱變換f()具有無關性。
在Java中,數組具有協變性,而泛型具有無關性,示例代碼如下:
Object[] array = new String[10];
//編譯錯誤
ArrayList<Object> list=new ArrayList<String>();
這兩句代碼,數組正常編譯通過,而泛型拋出了編譯期錯誤,應用之前提出的概念對代碼進行分析,可知:
1、String ≦ Object
2、數組的變換可以表達為f(A)=A[],通過之前的示例,可以得出下推論:
f(String) = String[] 以及 f(Object) = Object[];
4、通過代碼驗證,String[] ≦ Object[] 是成立的,由此可見,數組具有協變性。
8. java中泛型是什麼意思,作用是什麼
java 泛型是java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、介面和方法的創建中,分別稱為泛型類、泛型介面、泛型方法。
泛型(Generic type 或者 generics)是對 Java 語言的類型系統的一種擴展,以支持創建可以按類型進行參數化的類。可以把類型參數看作是使用參數化類型時指定的類型的一個佔位符,就像方法的形式參數是運行時傳遞的值的佔位符一樣。
可以在集合框架(Collection framework)中看到泛型的動機。例如,Map 類允許您向一個 Map 添加任意類的對象,即使最常見的情況是在給定映射(map)中保存某個特定類型(比如 String)的對象。
因為 Map.get() 被定義為返回 Object,所以一般必須將 Map.get() 的結果強制類型轉換為期望的類型,如下面的代碼所示:
Map m = new HashMap();
m.put("key", "blarg");
String s = (String) m.get("key");
要讓程序通過編譯,必須將 get() 的結果強制類型轉換為 String,並且希望結果真的是一個 String。但是有可能某人已經在該映射中保存了不是 String 的東西,這樣的話,上面的代碼將會拋出 ClassCastException。
理想情況下,您可能會得出這樣一個觀點,即 m 是一個 Map,它將 String 鍵映射到 String 值。這可以讓您消除代碼中的強制類型轉換,同時獲得一個附加的類型檢查層,該檢查層可以防止有人將錯誤類型的鍵或值保存在集合中。這就是泛型所做的工作。
泛型的好處
Java 語言中引入泛型是一個較大的功能增強。不僅語言、類型系統和編譯器有了較大的變化,以支持泛型,而且類庫也進行了大翻修,所以許多重要的類,比如集合框架,都已經成為泛型化的了。
這帶來了很多好處:
1,類型安全。 泛型的主要目標是提高 Java 程序的類型安全。通過知道使用泛型定義的變數的類型限制,編譯器可以在一個高得多的程度上驗證類型假設。沒有泛型,這些假設就只存在於程序員的頭腦中(或者如果幸運的話,還存在於代碼注釋中)。
2,消除強制類型轉換。 泛型的一個附帶好處是,消除源代碼中的許多強制類型轉換。這使得代碼更加可讀,並且減少了出錯機會。
3,潛在的性能收益。 泛型為較大的優化帶來可能。在泛型的初始實現中,編譯器將強制類型轉換(沒有泛型的話,程序員會指定這些強制類型轉換)插入生成的位元組碼中。但是更多類型信息可用於編譯器這一事實,為未來版本的 JVM 的優化帶來可能。由於泛型的實現方式,支持泛型(幾乎)不需要 JVM 或類文件更改。所有工作都在編譯器中完成,編譯器生成類似於沒有泛型(和強制類型轉換)時所寫的代碼,只是更能確保類型安全而已。
Java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查類型安全,並且所有的強制轉換都是自動和隱式的,提高代碼的重用率。
泛型在使用中還有一些規則和限制:
1、泛型的類型參數只能是類類型(包括自定義類),不能是簡單類型。
2、同一種泛型可以對應多個版本(因為參數類型是不確定的),不同版本的泛型類實例是不兼容的。
3、泛型的類型參數可以有多個。
4、泛型的參數類型可以使用extends語句,例如<T extends superclass>。習慣上成為「有界類型」。
5、泛型的參數類型還可以是通配符類型。例如Class<?> classType = Class.forName(Java.lang.String);
泛 型還有介面、方法等等,內容很多,需要花費一番功夫才能理解掌握並熟練應用。在此給出我曾經了解泛型時候寫出的兩個例子(根據看的印象寫的),實現同樣的 功能,一個使用了泛型,一個沒有使用,通過對比,可以很快學會泛型的應用,學會這個基本上學會了泛型70%的內容。
9. java泛型的高級應用
在上面的例子中,由於沒有限制class GenericsFoo<T>類型持有者T的范圍,實際上這里的限定類型相當於Object,這和「Object泛型」實質是一樣的。限制比如我們要限制T為集合介面類型。只需要這么做:
class GenericsFoo<T extends Collection>,這樣類中的泛型T只能是Collection介面的實現類,傳入非Collection介面編譯會出錯。
注意:<T extends Collection>這里的限定使用關鍵字extends,後面可以是類也可以是介面。但這里的extends已經不是繼承的含義了,應該理解為T類型是實現Collection介面的類型,或者T是繼承了XX類的類型。
下面繼續對上面的例子改進,我只要實現了集合介面的類型: publicclassCollectionGenFoo<TextendsCollection>{privateTx;publicCollectionGenFoo(Tx){this.x=x;}publicTgetX(){returnx;}publicvoidsetX(Tx){this.x=x;}}實例化的時候可以這么寫: {publicstaticvoidmain(Stringargs[]){CollectionGenFoo<ArrayList>listFoo=null;listFoo=newCollectionGenFoo<ArrayList>(newArrayList());//出錯了,不讓這么干。//原來作者寫的這個地方有誤,需要將listFoo改為listFoo1//需要將CollectionGenFoo<Collection>改為CollectionGenFoo<ArrayList>//CollectionGenFoo<Collection>listFoo1=null;//listFoo1=newCollectionGenFoo<ArrayList>(newArrayList());System.out.println("實例化成功!");}}當前看到的這個寫法是可以編譯通過,並運行成功。可是注釋掉的兩行加上就出錯了,因為<T extends Collection>這么定義類型的時候,就限定了構造此類實例的時候T是確定的一個類型,這個類型實現了Collection介面,但是實現 Collection介面的類很多很多,如果針對每一種都要寫出具體的子類類型,那也太麻煩了,我乾脆還不如用Object通用一下。別急,泛型針對這種情況還有更好的解決方案,那就是「通配符泛型」。 雖然Java泛型簡單的用 extends 統一的表示了原有的 extends 和 implements 的概念,但仍要遵循應用的體系,Java 只能繼承一個類,但可以實現多個介面,所以你的某個類型需要用 extends 限定,且有多種類型的時候,只能存在一個是類,並且類寫在第一位,介面列在後面,也就是:
<T extends SomeClass & interface1 & interface2 & interface3>
這里的例子僅演示了泛型方法的類型限定,對於泛型類中類型參數的限制用完全一樣的規則,只是加在類聲明的頭部,如: publicclassDemo<TextendsComparable&Serializable>{//T類型就可以用Comparable聲明的方法和Seriablizable所擁有的特性了} 為了解決類型被限制死了不能動態根據實例來確定的缺點,引入了「通配符泛型」,針對上面的例子,使用通配泛型格式為<? extends Collection>,「?」代表未知類型,這個類型是實現Collection介面。那麼上面實現的方式可以寫為: {publicstaticvoidmain(Stringargs[]){CollectionGenFoo<ArrayList>listFoo=null;listFoo=newCollectionGenFoo<ArrayList>(newArrayList());//出錯了,不讓這么干。//原來作者寫的這個地方有誤,需要將listFoo改為listFoo1//CollectionGenFoo<Collection>listFoo1=null;//listFoo1=newCollectionGenFoo<ArrayList>(newArrayList());System.out.println("實例化成功!");}}注意:
1、如果只指定了<?>,而沒有extends,則默認是允許Object及其下的任何Java類了。也就是任意類。
2、通配符泛型不單可以向下限制,如<? extends Collection>,還可以向上限制,如<? super Double>,表示類型只能接受Double及其上層父類類型,如Number、Object類型的實例。
3、泛型類定義可以有多個泛型參數,中間用逗號隔開,還可以定義泛型介面,泛型方法。這些都與泛型類中泛型的使用規則類似。
10. java泛型介面是怎麼一回事,干什麼用的
這個啊 泛型好處多了。
有了泛型 你可以再hashtable中存任何類型的value 包括自定義的類
例如。有一個類是 class client{}
Hashtable<String ,client> ht = new Hashtable<String ,client>();
很方便的東西。讓你代碼更完美的。
=============================接話獻佛========================
應該是我很久沒有好好學技術了,有時候想用的時候卻發現不會寫,比如今天遇到了泛型介面,所以要記錄一下,這樣才能更明白...
在這里我並不想說泛型介面怎麼寫,這個很簡單,後面會寫的,只是想說我為什麼要用.
泛型介面的意圖是什麼?請看如下的問題:
Java代碼
abstract class BaseBean{
//略
}
Interface IA{
public BaseBean doSomething();
}
下面我們繼承這個BaseBean
Java代碼
class ChildBean extends BaseBean{
}
接下來實現介面
Java代碼
class IAImpl implements IA{
public BaseBean doSomething(){
return new ChildBean();
}
}
好了這是慣常的寫法,但是同學們有沒有發現一個問題當你返回得到BaseBean的時候其實你需要的是他的實例而不是這個真實的Bean,而當你強轉時又需要注意兩點: NullPoint 和 類型是否對,這個很麻煩,因為調用者完全不知道調用什麼.那麼我們來描述我們需要什麼:
我們需要IA的doSomething返回的是一個對象這個對象extends於BaseBean
那麼接下來我們就用泛型介面吧:
Java代碼
Interface IA<T extends BaseBean>{
public T doSomething();
}
class IAImpl implements IA<ChildBean>{
public ChildBean doSomething(){
return new ChildBean();
}
}
這樣當你調用這個實現的時候就能明確地得到返回的對象類型,清楚明了,這就是泛型介面的使用.其實我們平時一直在用的 Iterable就是這玩意大家可以去看下. 回家准備讀下java編程思想中的相關段落.
總結今天收獲很大,這里要感謝下靈芝同學給我的幫助,是她告訴了我,我所想要的東西叫泛型介面,感謝...
下次等我把泛型都再重新回爐下,再來把泛型的其他東西講來聽聽...