以下,我使用乙個例項,分享一下用於簡化泛型api設計的小技巧,「如何在泛型方法呼叫時,過濾掉可以隱式推斷出的泛型引數」:
原有設計:
系統中原來有這樣乙個靜態的泛型api:
1
protected
static
propertyinforegisterproperty(expression> propertylambdaexpression)
使用方法:
1
var
codeproperty = registerproperty(e => e.code);
可以看到,該方法雖然可以從引數中隱式推斷出 p 的具體型別,但是無法推斷出 t 的具體型別,所以需要顯式指定t的型別。
由於語法特性的問題,我們不能使用registerproperty(e => e.code)的方法來只傳遞乙個泛型引數給api;導致在使用該方法時,不得不把所有的的泛型引數都顯式指定,也就是上面的使用方法。
靈光一現:
如何做到不傳遞第二個泛型引數呢?在n天之後,發現了以下這個方法可以簡化傳入的泛型引數:
為該泛型方法宣告乙個泛型類:
1
2
3
4
5
6
7
8
9
10
11
public
class
propertyregister
}
1
這時,呼叫方法變為:
1
var
codeproperty = 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 ...