2017-03-13 106 views
8

Interfejs elementu można zdefiniować tylko w interfejsie klasy najwyższego poziomu lub lub w kontekście statycznym.Jak zdefiniować interfejs użytkownika w kontekście statycznym w java?

Przypadek A: Interfejs obrębie klasy najwyższego poziomu działa idealnie

package multiplei.interfaces.test; 

public class InterfaceBetweenClass { 

    interface Foo { 
     void show(); 
    } 

    class InnerClass implements Foo{ 
     public void show(){ 
      System.out.println("Inner Class implements Foo"); 
     } 
    } 

    public static void main(String[] args) { 
     new InterfaceBetweenClass().new InnerClass().show(); 
    } 

} 

Przypadek B: Interfejs obrębie interfejsu działa dobrze.

public interface Creatable { 
    interface Foo{ 
     void show(); 
    }} 

Przypadek C: Wiem, że to brzmi głupio, dlaczego ktoś miałby określić interfejs w statycznym kontekście. Ale daje mi ten sam komunikat o błędzie, gdy próbuję zdefiniować interfejs w statycznym kontekście.

package multiplei.interfaces.test; 

public class InterfaceBetweenClass { 
    public static void main(String[] args) { 
     interface Foo { //Line 5 
      void show(); 
     } 
    } 

}} 

Ale numer linii 5 daje mi się następujący komunikat o błędzie "The member interface Foo can only be defined inside a top-level class or interface or in a static context. "Proszę mi pomóc z tym Jeśli interfejs może być zdefiniowana w kontekście statyczne to jak?

+0

Nawet gdyby było to możliwe, nie byłoby sensu tworzenie interfejsu w ramach metody. Ten interfejs nie byłby widoczny poza zakresem metod, nawet w anonimowych klasach wewnętrznych, które później zostaną utworzone w tej samej metodzie. –

+0

@ TimothyTruckle Nie wiem o tym. Wydaje się, że jest tak samo jak w przypadku "klas lokalnych", a te są dozwolone w ramach metod: http://stackoverflow.com/questions/2428186/use-of-class-definitions-inside-a-method-in-java? noredirect = 1 & lq = 1 – Thilo

+1

@Thilo * "Wygląda na to, że sytuacja wygląda tak samo, jak w przypadku" lokalnych klas "* *. Tworzysz lokalną klasę do natychmiastowego użycia w tej samej metodzie (i nigdzie indziej), podczas gdy tworzysz interfejsy do użytku w * jakimś innym miejscu * zamiast jakiejś konkretnej klasy implementującej je. –

Odpowiedz

4

Nie można zdefiniować interfejsów wewnątrz metod.

myślę scenariusz komunikat o błędzie odnoszący się do definiuje interfejs wewnątrz wewnętrznej klasy (co można zrobić, ale tylko wtedy, gdy jest static wewnętrzna klasa):

class A{ 
    static class X{ 
    interface Y{} 
    } 
} 
+0

Statyczne Zagnieżdżone Klasy są po prostu jak klasy najwyższego poziomu, więc powinny być objęte przypadkiem A :( –