小技巧 簡化你的泛型API

2021-09-23 21:31:29 字數 1318 閱讀 2723

以下,我使用乙個例項,分享一下用於簡化泛型api設計的小技巧,「如何在泛型方法呼叫時,過濾掉可以隱式推斷出的泛型引數」:

原有設計:

系統中原來有這樣乙個靜態的泛型api:

1

protectedstaticpropertyinforegisterproperty(expression> propertylambdaexpression)

使用方法:

1

varcodeproperty = registerproperty(e => e.code);

可以看到,該方法雖然可以從引數中隱式推斷出 p 的具體型別,但是無法推斷出 t 的具體型別,所以需要顯式指定t的型別。

由於語法特性的問題,我們不能使用registerproperty(e => e.code)的方法來只傳遞乙個泛型引數給api;導致在使用該方法時,不得不把所有的的泛型引數都顯式指定,也就是上面的使用方法。

靈光一現:

如何做到不傳遞第二個泛型引數呢?在n天之後,發現了以下這個方法可以簡化傳入的泛型引數:

為該泛型方法宣告乙個泛型類:

1

2

3

4

5

6

7

8

9

10

11

publicclasspropertyregister

}

1

這時,呼叫方法變為:

1

varcodeproperty = propertyregister.register(e => e.code);

這樣好嗎?

這個方法的好處在於簡化泛型api的客戶程式呼叫**,只顯式傳入無法隱式推斷的泛型引數,不再傳入多餘的泛型引數。

在這個例子中,只有兩個泛型引數,可能您會覺得多此一舉。不過當你的引數更多,而無法推斷的引數只有乙個時,這個方法就有發揮的地方了。 :)

泛型 列舉與for語句的簡化寫法2

請編寫程式 首先在程式中定義乙個列舉型別 它含有七個列舉變數,分別表示乙個星期每天的名稱,然後在控制台視窗輸出這些名稱。to change this template,choose tools templates and open the template in the editor.package...

泛型的使用環境,以及技巧

在例項化的時候,傳入入參型別,中帶入入參 genericclassgenericclass new genericclass string 1 genericclass.getfenerictype 呼叫泛型類中的方法 2.泛型方法 在中有說明 這裡在下就不說了 3.泛型介面 使用場景 定義乙個介面...

泛型中的Lambda表示式的簡化過程

func double double double funcdouble newfunc double double double a,b 先提一點 lambda表示式存在的意義是 不想重複宣告簡單的方法 為了避免新增過於簡單的 而使得程式看起來變得臃腫 比如 想呼叫乙個加法 public int ...