Java泛型的理解

2021-09-13 14:35:37 字數 1938 閱讀 3409

t  bean ;

classbean;

class<?> bean;

單獨的t代表乙個型別,而class和class<?>代表這個型別所對應的類

class在例項化的時候,t要替換成具體類

class<?>它是個通配泛型,?可以代表任何型別   

<? extends t>受限統配,表示t的乙個未知子類。

<? super t>下限統配,表示t的乙個未知父類。

package com.advance.genericity;/*

* * created by hasee on 2018/8/23. */

/*** @auther: 谷天樂

* @date: 2018/8/23 09:28

* @description: */

public

class

genericity

/*** 此方法是乙個非泛型類中的泛型方法,引數為class型別,可以傳入任何類,但是class將引數在函式內部的型別固定為 t類,使用clazz.newinstance(),返回的型別也為固定的 t 型別。

* 如: 傳入dog.class, 函式中的 t 固定為dog.class,函式返回的是dog型別,不需要強制轉換為dog型別

* (當然,函式返回型別也可以是object型別,但是沒必要)

*/public

static

t creatnew1(classclazz) throws illegalacces***ception, instantiationexception

/*** 此方法引數是class<? extends animal>,只能傳入animal及其子類的型別,函式返回型別只能宣告為animal或object型別,

* 如:傳入cat.class,函式返回乙個animal的子類物件,需將此子類物件強制轉換為具體的子類(即cat類)。

*/public

static animal creatnew2(class<? extends animal>clazz) throws illegalacces***ception, instantiationexception

/*** 此方法引數是class,可傳入任何類,其返回只能宣告為object類物件。

* 如:傳入dog.class, 返回的是object型別的物件,需強制轉換為dog型別的物件。

*/public

static

object creatnew3(class clazz) throws illegalacces***ception, instantiationexception

/*** 傳入引數class<?> 和 上乙個方法傳入 class 的區別還不是很清楚,其返回只能宣告為object類物件。

* 如:cat.class, 返回的是object型別的物件,需強制轉換為cat型別的物件。

*/public

static object creatnew4(class<?>clazz) throws illegalacces***ception, instantiationexception

/*** 傳入object型別的物件,返回也宣告為object型別。

*/public

static object creatnew5(object object

) }

abstract

class

animal

class

dog extends animal

class

cat extends animal /**

* 這些方法,傳的引數宣告不同,其返回的宣告也必然要隨之不同。

*/

posted @

2018-08-23 09:56

rest探路者 閱讀(

...)

編輯收藏

Java基礎 泛型理解

先來看下這一段 public class test test public void test 泛型擦除,由於虛擬機器中沒有泛型型別的物件。無論定義何種泛型型別,都必須會有乙個原始型別,虛擬機器執行時會將型別變數擦除,並統一用object代替,從此變為乙個普通類物件。test public void...

Java 泛型引數型別理解

泛型 generics extends super 1 泛型引數型別限制 1 泛型的引數型別只能是類 class 型別,而不能是簡單型別。2 可以宣告多個泛型引數型別,比如 同時還可以巢狀泛型,例如 3 泛型 的引數類 型可以使用 extends 語句,例如 4 泛型的引數型別可以使用 super ...

Java 泛型引數型別理解

1 泛型引數型別限制 1 泛型的引數型別只能是類 class 型別,而不能是簡單型別。2 可以宣告多個泛型引數型別,比如 同時還可以巢狀泛型,例如 3 泛型的引數 型別可以使用 extends 語句,例如。4 泛型的引數型別可以使用 super 語句,例如 t super childclass 5 ...