2017-06-01 19 views
4

私はJava 1.8で作られたコードを持っています。それを1.6で動作させるために変換したいと思います。Javaラムダ式を1.6に変換

このコードは、次のいずれかです。

private void handleCanNotConnect(Throwable cause) { 
    isConnected = false; 
    fireAll(l -> l.connectionFailed(cause)); 
} 

private void fireAll(Consumer<MyListener> action){ 
    action.accept(listener); 
} 

私はそれを変換する必要がありますどのように?

よろしくお願いいたします。

答えて

4

ラムダ関数の前に、匿名クラスをインスタンス化して、その場でインターフェイスを実装します。

public interface MyConsumer { 
    public void accept(MyListener l); 
} 

次にあなたが使用することができます:causefinalとしてマークされていること

private void handleCanNotConnect(final Throwable cause) { 
    isConnected = false; 
    fireAll(new MyConsumer() { 
     @Override 
     public void accept(MyListener l) { 
      l.connectionFailed(cause); 
     } 
    }); 
} 

private void fireAll(MyConsumer action){ 
    action.accept(listener); 
} 

注意をConsumer<MyListener>が利用できないので、ここで

は、インターフェースです。

+1

「Consumer」は1.8以降ですか? –

+0

@StefanWarminskiそうです。それだけでもあります。ありがとう。 – khelwood

+0

驚くばかり!ありがとう – user4919313