GenericDeclaration介面的研究

2021-09-01 16:52:44 字數 2622 閱讀 9128

這幾天看class類的**,對泛型有了一點理解,在這裡與大家分享一下。

首先我們來看乙個非常簡單的泛型

public class testa
在這個類中

稱為泛型變數。

而k extends list & serilizable

的意思是

k這個泛型是有上界的,它必須是乙個繼承

list

以及serilizable

的類或介面。

說完這些我們在來看看class

類,class

類繼承的和泛型有關的介面有

genericdecalaration

以及type

。genericdecalaration介面是說明哪些類的物件可以通過反射機制來獲取泛型宣告,它有三個實現類,分別是

cass, constructor, method

。可能我們會奇怪為什麼沒有object

類,那是因為

object

類有乙個

public

final

native

class<?> getclass();

方法。

通過呼叫這個方法我們可以返回乙個class

型別的物件

以下面這個例子為例:

public class test 

}

我們定義了乙個

test

類,然後生成了乙個例項化物件

t,通過

getclass

方法我們獲得了

t的執行時類物件

c,這個是c就是

class

型別的。我們試圖將它輸出到控制台,顯示的結果正好就是

test

——我們自定義的類的名稱。

所以說每乙個object

類的子類都可以通過

getclass

來獲得其對應的執行時類物件。

class

類實現了

genericdecalaration

介面就約等於所有

object

的子類都實現了

genericdecalaration

介面了。

那麼實現genericdecalaration

介面有什麼用呢?

genericdecalaration

介面有乙個

public

typevariable<?> gettypeparameters();方法

這個方法返回的泛型變數陣列代表了泛型宣告的內容,

typevariable

型別就是定義泛型變數的。

以下面這個例子為例:

public class test

}

我們可以看到通過

gettypeparameters

方法返回了乙個長度為

2的陣列,他們分別表示了

extends

list & serializable, v>

泛型變數中的 k

和v(extends

list & serializable

應該屬於修飾)

從下面開始我們就要來分析一下泛型變數

typevariable介面

typevariable

總共有三個方法

type getbounds();

d getgenericdeclaration();

string getname();

type getbounds();

方法很好理解,就是返回當前型別的邊界,

以剛剛的例子為例

k extends

list & serializable

,那k的邊界就應該是

list

和serializable

用下面的例子來試驗一下

public class test

}}

我們看到控制台先輸出了

typearg.lenght=

2說明有兩個上邊界。然後分別輸出了兩個邊界的型別。

d getgenericdeclaration();

方法則是返回在哪乙個類上面進行了泛型的宣告(我們看這個方法的名字直譯是「獲取通用宣告」,但返回的卻是乙個在**中具有宣告的類的執行時類物件。我們可以這樣理解,

class型別實現了

genericdeclaration

介面,那我們要看宣告的**就要往這個

class上找,可以看成是一種提示吧。)

以下面的例子為例

public class test

}

在控制台直接顯示了這個泛型是宣告在

test這個類。

最後string getname();

方法返回的是泛型變數的名稱,就一剛剛那個例子為例,然後的就是k和v

public class test

}

通過這幾個方法我們就可以利用反射機制來動態獲取型別的泛型宣告了。

介面的設計

佘士東 08 41 47 我設計乙個介面,其中有些方法很類似,比如取得某個工作物件,有可能需要獲得多個,也有可能獲得其中乙個,引數為工作物件的名字 名字列表。我是用窄介面還是寬介面好,是用乙個最大功能的方法還是多個過載方法好?比如 iservice public worker getworker s...

介面的意義

外掛程式式框架作為乙個高耦合低聚合的系統,它的功能定義與功能實現之間是分離的,這種策略是高耦合實現的保證。外掛程式式框架好像乙個功能聚集站,它對外界宣布,只要符合它發布的某種規範的元件 實現介面的類通常稱為元件 都可以加入到這個平台中,而這些元件到底是做什麼事情的,框架並不關心,當然,框架也提供了一...

介面的意義

介面的意義 外掛程式式框架作為乙個高聚合低耦合的系統,它的功能定義與功能實現之間是分離的,這種策略是高聚合實現的保證。外掛程式式框架好像乙個功能聚集站,它對外界宣布,只要符合它發布的某種規範的元件 實現介面的類通常稱為元件 都可以加入到這個平台中,而這些元件到底是做什麼事情的,框架並不關心,當然,框...