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 ...