2017-10-10 122 views
1

我學習Java和最近遇到下面的一段正常工作的代碼來了,但我不明白爲什麼:的Java接口內的返回類型

public class ExecutionChain<Result> { 

    Parametriezed1<Result> classMethod1() { 
     return this::method1; 
    } 

    Parametriezed2<Result> method1() { 
     return this::method2; 
    } 

    Result method2(Result result) { 
     return result; 
    } 

    interface Parametriezed1<Result> { 
     Parametriezed2 method1(); 
    } 

    interface Parametriezed2<Result> { 
     Result method2(Result result); 
    } 
} 

可能有人請解釋一下:

  • 爲什麼method1似乎是壓倒一切Parametriezed2 method1()沒有ExecutionChain實施Parametriezed1
  • 爲什麼它是確定調用this::method1儘管事實上, method1method2都不會返回Parametriezed1類型?

對於這裏使用的原理的一些文檔,我將不勝感激。

+1

*僅供參考:*該代碼是**糟糕**。 'Parametriezed1'中'method1()'的返回類型返回一個** raw **泛型。 *非常差!* – Andreas

回答

0

這兩個接口只包含一個方法,這使得它們爲FunctionalInterface s,這意味着具有正確簽名的單個函數可以實現它們。

返回接口的方法返回具有正確簽名的方法。

該類本身不實現接口;要做到這一點,這些方法也需要具有相同的名稱。也許把它看作是返回類的一個子集。

如果你問我,這是一段非常複雜的代碼。

+0

感謝您指出這些接口是功能性接口。他們沒有標記,我沒有注意到它:) – nibsa