泛型介面
a. 介面上自定義的泛型引數的具體資料型別,是在 其實現類 實現該介面 的時候指定的。
b. 若在實現該泛型介面的時候,未指定具體的資料型別,則預設為object
c. 有些時候我們在定義乙個類去實現泛型介面時,我們並不確定這個類將要實現哪種型別的類,這時我們就不能確定介面中的泛型,那麼介面中的泛型尚未確認,這時就要求這個類也必須定義泛型,而且泛型名稱要一致,在例項化這個類的物件時,需要指定該泛型的型別,若不指定,預設為object
泛型類
當類中要操作的資料型別不確定的時候,可以定義泛型類(集合體系中的類)。格式如下:
泛型類與泛型方法
泛型類在宣告物件的時候,就已經定義好了能操作的資料型別,因此,在呼叫該類的方法時,不可避免的限定了方法的引數型別。這時,定義泛型方法就比較方便。泛型類中也可以定義泛型方法。
靜態方法不可以訪問類上定義的泛型,如果靜態方法操作的資料型別不確定,可以將該方法定義為泛型方法。
泛型方法
形式: publicvoid show(t t)
public static int sum(w w)
必須放在修飾符之後,返回值之前。
* 1. 定義泛型方法時,必須在返回值前邊加乙個,來宣告這是乙個泛型方法,dosome3()就不是乙個泛型方法
* 2. 是否是泛型方法與該類是否是泛型類無關,即該類即使不存在泛型e,dosome()和dosome1()依然是成立的泛型方法
* 3. 既然是泛型方法,就代表著我們不知道具體的型別是什麼,因此無法對引數型別指定前對其做具體操作
* 優勢:泛型類要在例項化的時候就指明型別,如果想換一種型別,不得不重新new一次,可能不夠靈活;
* 而泛型方法可以在呼叫的時候指明型別,更加靈活。
* 劣勢:泛型方法的劣勢也很明顯,太過泛化,導致無法限制實參範圍,無法在該方法被呼叫之前獲知實參的具體屬性,
* 所以也就無法在方法體內部對引數t 做一些具體操作,只能當作object處理。
*/public class gtest3
public t dosome1(t t)
public e dosome2(classf, e e)
public void dosome3(e e)
public static void main(string args)
throws classnotfoundexception, instantiationexception, illegalacces***ception
}泛型方法補充:
泛型方法並不一定需要泛型引數,或者說不一定需要將泛型宣告t作為引數傳入,如下例方法,在呼叫deserialize反序列化方法時,其返回值我們可以定義為任意型別,這不會導致任何編譯報錯,乙個簡單的測試demo如下,這就體現了泛型的好處。但是在執行時需要我們更加小心,避免型別轉換異常。
對於靜態的泛型方法,再舉一些例子
public final class optional.
*/private static final optional> empty = new optional<>();
public staticoptionalempty()
}
package future;
/** * @author lifeng
* @create 2019-11-03 上午 11:40
* @describe
*/public class test1122
public static void main(string args)
}
public t deserialize(byte bytes)
bytearrayinputstream bais = null;
objectinputstream ois = null;
try catch (classnotfoundexception e) catch (ioexception e) finally catch (ioexception e)
}if (bais != null) catch (ioexception e) }}
}
對於泛型限定,列舉乙個略微繞的例子:
inte***ce isortvo> extends comparable
class a implements isortvo }
class b implements isortvo }
class c implements isortvo
}
在這個例子中,其實看明白了也挺簡單,isortvo 的泛型必須是符合類b這種格式的實現類,a和c是不滿足泛型要求的。 Java中泛型的應用總結
1 基本使用 public inte ce list 2 泛型與子類 child是parent的子類,list卻不是list的子類。因此 listlist new arraylist 是錯誤的。如果上面是正確的,那麼 listls new arraylist 1 listlo ls 2 lo.add...
JAVA 泛型類,限制泛型和泛型方法
我在學習集合的時候對泛型還不太了解,只是覺得用了泛型之後能向自己的集合裡加入自己指定型別的物件,可以減少資料型別的轉換。那麼,脫離集合後,泛型到底該如何使用。今天碰巧看了一段關於泛型的講解,覺得泛型也沒有自己想象中那麼難,於是將自己的心得分享出來,希望能幫到有需要的人。泛型的知識點大概有 泛型類,限...
泛型 泛型入門 萬用字元 泛型的其它應用
泛型可以解決資料型別的安全性問題,它主要的原理是 是在類宣告的時候通過乙個標識表示類中某個屬性的型別或者是某個方法的返回值及引數型別。這樣在宣告類或例項化的時候只要指定好需要的型別即可。泛型的定義格式 訪問許可權 class 類名稱 泛型型別1,泛型型別2,泛型型別3 訪問許可權 返回值型別宣告 方...