2014-11-05 176 views
0

我有一個方法看起來像這樣。如何傳遞參數化lambda的構造函數參考?

static void doSomething(Function<Irrelevant, Some> supplier) { 
} 

當我嘗試這樣做,

doSomething((i) -> new Some()); // i is irrelevant 

它的工作原理。但是當我嘗試這樣做時,

doSomething((i) -> Some::new); // compiler -> bad return type in lambda expression 

它沒有。

這是正常的嗎?有什麼辦法可以傳遞參數化函數的構造函數參考嗎?

回答

3

沒有參數的構造函數將是Supplier<Some>,因此它與請求Function<Irrelevant, Some>的方法不兼容。

你在doSomething((i) -> Some::new)拉姆達實際上採取一些元素,並返回一個引用該構造函數,即一個Supplier<Some>Some本身。您可能正在查找doSomething(Some::new) - 但正如我所說,由於構造函數與方法的參數不匹配(如果構造函數的參數類型爲Irrelevant,它將工作),這將不起作用。

如果參數是真的無關,那麼你可以在方法的簽名更改爲

static void doSomething(Supplier<Some> supplier) { 

如果這是不可能的,有doSomething((i) -> new Some());你的做法是完全正常的。

相關問題