2016-04-02 53 views
0

クラスのインターフェイスを実装するタイミングと、インターフェイスの匿名実装をインスタンス化するタイミング。以下は2つのインタフェースです。クラスのインターフェイスを実装するタイミングとインターフェイスの匿名実装をインスタンス化するタイミング

public interface InterfaceOne { 
    void one(); 
} 

public interface InterfaceTwo { 
    void two(); 
} 

アプローチ1:インタフェースの匿名の実装をインスタンス化

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 
     } 
    }; 
} 

我々が必要とするシナリオは何ですか:クラス

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 
    } 
} 

アプローチ2でインターフェイスを実装しますアプローチ1とアプローチ2を使用する?

答えて

1

機能的なインターフェイスでは、ラムダを定義して匿名クラスとして内部的に管理できるため、Java8の機能がわずかに変更されているため、扱いにくい構文が多少保存されます。

いずれの場合でも、匿名のクラスは、名前を付ける必要がないもの(ボタンの場合はActionListenerと考える)の場合のみ意味があります。代わりに、名前付きクラスは常に意味があります。クラスの命名を避ける明白な理由はありません。

関連する問題