2016-05-25 17 views
5

Potrzebuję mieć kilka klas z metodą statyczną initialize zamiast bloku static {...}, w którym uruchamiane są niektóre zadania inicjowania. W Java 8 można zdefiniować metodę statycznego interfejsu, ale nie potrzebuję jej, chcę po prostu wiedzieć, że klasa implementuje tę statyczną metodę.Java: dlaczego metody statycznych interfejsów powinny mieć ciało?

interface Initializable { 
    static void initialize(){} 
} 

class Icons implements Initializable { 
    public static void initialize(){ 
     //... 
    } 

    //... 
} 

Co się stało z ideą przy użyciu statycznych metod interfejsu w tej sprawie i dlaczego nie jest możliwe zdefiniowanie interfejsu metody statycznej bez ciała?

Ogólny cel: zainicjować Collection klas rozpoczęcia uruchamiania aplikacji, wywołując odpowiednie metody. Zadania inicjujące to: ustanawianie połączenia z bazą danych, renderowanie ikon i grafiki, analizowanie konfiguracji stacji roboczych itp.

+0

Podziel się swoimi pomysłami, jak nazwać popularną metodę dla wielu klas, bardziej wdzięczną niż 'Class1.initialize(); Class2.initialize(); ... '; –

Odpowiedz

5

Czego chcesz, nie jest możliwe. Interfejsy określają jedynie, jakie metody instancji muszą zostać zaimplementowane przez klasę.

Metoda statyczna nie wymaga wystąpienia klasy zawierającej, a zatem, jeśli nie potrzebuje członków prywatnych, może być z zasady umieszczona w dowolnym miejscu. Od wersji Java 8 można go również umieścić w interfejsie, ale jest to głównie funkcja organizacyjna: teraz możesz umieścić statyczne metody, które "należą" do interfejsu w interfejsie, i nie musisz tworzyć osobnych klas dla nich (tak jak klasa Collections).

Spróbuj następujący kod źródłowy:

interface A { 
    static void f() { } 
} 

public B implements A { } 

Teraz, starając się wywołać B.f() lub new B().f() wyda błąd kompilatora. Musisz zadzwonić do tej metody przez A.f(). Klasa B nie dziedziczy statycznych metod z interfejsu.

Powiązane problemy