2015-10-27 55 views
-1

我正在學習,我已經給了簡單的(我認爲是)任務。 我必須讓這段代碼的工作(我不能修改):FunctionalInterface是否可以擴展非功能性接口類?

JButton b = new JButton("Myszą ciśnij"); 
    b.addMouseListener ((MousePressListener) e -> System.out.println("ok")); 

我相信MousePressListener應該FunctionalInterface但後來,它不能擴展的MouseListener。有沒有辦法解決這個問題,還是我從壞的方面接近它?

+1

請參閱http://stackoverflow.com/questions/25299653/java-idiom-for-lambdas-with-non-sam-interfaces和http://stackoverflow.com/questions/21833537/java-8-lambda-在嵌套類中嵌入多個方法 – assylias

+0

爲什麼不創建一個不是函數接口的隨機類'Foo',而是創建一個擴展'Foo'的接口'Bar',該接口具有一個抽象方法,並且添加'@ FunctionalInterface'註釋到'Bar'?如果'Bar'不是Java中的函數接口,它將不能編譯。 –

回答

1

addMouseListener需要MouseListenerMouseListener有多個抽象方法。因此,沒有lambda表達式可以是MouseListener類型。

我不知道是什麼MousePressListener,但如果它是一個擴展MouseListener一個接口,它仍然繼承MouseListener多個抽象方法,所以它不可能是一個功能接口。

+0

其實它可以。通過設置「mouseClicked」摘要,「mouseEntered」,「mouseExited」,「mousePressed」和「mouseReleased」默認設置來實現。謝謝你的幫助,雖然:) – Romen