2016-11-12 69 views
0

這是我使用的接口:的Java接口的重用方法

interface Command { 
    void run(int a, int b, int c); 
    void run(int a, int b, int c, int d, int e); 
} 

void add(Command c){ 

} 

這是執行:(使用第一次運行方法)

add((a, b, c) -> System.out.println("")); 

我上執行的錯誤是:

The target type of this expression must be a functional interface 

而這隻有當我註釋掉第二個運行方法時纔會消失。

我希望能夠執行使用這兩種運行的方法相同的接口,而不必創建一個新的接口正好與方法2

如何執行?

+2

說我實現你'add'方法。你用'add((a,b,c) - > System.out.println(「」));'調用它。如果在執行'add'的時候,我會調用'c.add(1,2,3,4,5);'?你爲什麼期待? –

回答

1

A functional interface通過設計允許只有一種方法,所以你想做的事情不能直接完成,這是很明顯的原因:爲什麼允許用lambda實現一個功能接口必須創建一個有效的對象它的聲明,如果它有兩種方法你不能用一個lambda來實現它們。

一種解決方法可以是使用可變參數,如:

@FunctionalInterface 
interface Command { 
void run(int... args); 
} 

add(args -> { int z = args[0] + args[1] + args[2]; }); 
+0

我猜法正常工作,但我將不得不作出一個參數的某個實例調用方法: ((汽車)ARGS [0])getInCar() 有沒有辦法這樣可以做得更好? – user7148508