2014-09-19 74 views
0

正如我們所知,在java 1.8靜態方法被允許在接口中,我看到一些答案,如static methods defined in interface from jdk 1 8 why did they need to do so
但我不滿意。
此外,我認爲這可能會導致類似的問題:在java 1.8中的接口中添加的靜態方法

public interface MyInterface{ 
     public static void myMethod(); 
    } 

    class MyClass{ 
    MyInterface.myMethod(); // since myMethod is static but a huge error is waiting for us here ? 
    } 

但我仍然認爲這是一個出路的這一點,因爲這是加入由專業人員,所以任何人都可以請解釋甲骨文如何解決這個問題,有什麼需要添加這個?
非常感謝您的光臨。


我沒有使用過的Java 1.8,所以我從來不知道,在Java靜態方法需要定義不僅僅是聲明,我一直以爲接口作爲純抽象類我想這就是爲什麼這個想法定義一種方法對我來說似乎很陌生。感謝您的幫助 ! 。

+5

你還沒有顯示實際問題*是* ... – 2014-09-19 12:41:36

+0

這是一個很好的問題,我認爲。 – 2014-09-19 12:42:38

+2

你有沒有試過_huge error_發生? – Narmer 2014-09-19 12:43:18

回答

1

談到「什麼是需要添加」靜態方法:

http://www.informit.com/articles/article.aspx?p=2191423

報價之前的Java 8使人們有可能在 接口聲明的靜態方法,它是常見的做法是地方這些方法在伴侶 實用程序類中。例如,java.util.Collections類是java.util.Collection接口的 伴侶,並聲明靜態 方法,這些方法在相關Java集合框架接口中更合適。您不再需要提供您的 自己的伴侶實用程序類。相反,您可以將靜態方法 置於適當的界面中,這是培養的良好習慣。

此外,在接口的靜態方法有利於提供實用的方法,如空檢查,收集整理等而且重要的是它通過覆蓋它否認實現類提供了安全性。

+0

謝謝!瞭解這個概念 – user3921830 2014-09-19 13:05:04

0

這裏沒有問題,靜態方法由class擁有,而不是它的成員,所以這裏唯一的錯誤是你沒有定義方法itselt(只是聲明瞭它,這是靜態方法不允許的) )。