2016-04-02 14 views
0

Wann die Schnittstelle in der Klasse implementiert werden soll und wann eine anonyme Implementierung einer Schnittstelle instanziiert werden soll. Unten sind zwei Schnittstellen.Wann die Schnittstelle in der Klasse implementiert werden soll und wann eine anonyme Implementierung einer Schnittstelle instanziiert werden soll

public interface InterfaceOne { 
    void one(); 
} 

public interface InterfaceTwo { 
    void two(); 
} 

Ansatz 1: Implementieren Schnittstelle in der Klasse

public class A implements InterfaceOne, InterfaceTwo { 

    private void doSomething() { 
     Hello hello = new Hello(); 
     hello.hi(this); 
     hello.bye(this); 
    } 

    @Override 
    public void one() { 
     //One 
    } 

    @Override 
    public void two() { 
     //Two 
    } 
} 

Ansatz 2: Instantiate eine anonyme Implementierung einer Schnittstelle

public class B { 

    private void doSomething() { 
     Hello hello = new Hello(); 
     hello.hi(interfaceOne); 
     hello.bye(interfaceTwo); 
    } 

    private InterfaceOne interfaceOne = new InterfaceOne() { 
     @Override 
     public void one() { 
      //One 
     } 
    }; 

    private InterfaceTwo interfaceTwo = new InterfaceTwo() { 
     @Override 
     public void two() { 
      //Two 
     } 
    }; 
} 

Was die Szenarien, in denen wir brauchen Approach 1 und Approach 2 zu verwenden?

Antwort

1

Mit Java8 haben sich die Dinge leicht geändert, weil Sie mit funktionalen Schnittstellen Lambdas definieren können, die intern als anonyme Klassen verwaltet werden, so dass die umständliche Syntax etwas gespeichert wird.

In jedem Fall macht eine anonyme Klasse nur Sinn, wenn Sie mit etwas zu tun haben, das nicht benannt werden muss (denken Sie an eine ActionListener für eine Schaltfläche). Eine benannte Klasse macht stattdessen immer Sinn, es gibt keinen expliziten Grund, die Benennung einer Klasse zu vermeiden.

Verwandte Themen