2016-06-12 10 views
0

私はハンドラーを経由していました。その中のpostメソッドはRunnable型のパラメーターを受け入れます。 Runnableをは、我々が直接のRunnableの新しいインスタンスを作成することができますどのようにでJavaインタフェースであるので、私はAndroidでRunnableを理解する

final Handler handler = new Handler(); 
    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      timeView.clearComposingText(); 
      Integer hours = seconds/3600; 
      Integer minutes = (seconds % 3600)/60; 
      Integer secs = seconds % 60; 
      String time = String.format("%d:%02d:%02d",hours,minutes,secs); 
      timeView.setText(time); 

      if(running) 
      { 
       seconds++; 
      } 

      handler.postDelayed(this,1000); 
     } 
    }); 

に出くわした次のコードスニペットがありますか?

+0

これが呼ばれた「匿名の内部クラスです。」 Runnableインタフェースの実装は、クラスを他の場所で宣言するのではなく、インライン展開されています。 – Karakuri

+1

["implements Runnable"と "extends Thread"を参照](http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread) – mjn

答えて

1

匿名クラスはインターフェースを実装できますが、これは「implements」キーワードなしでインターフェースを実装するクラスを見る唯一の時間です。

完全な例は次のようになります。

public class MyClass { 

    public interface A { 
    void foo(); 
    } 

    public interface B { 
    void bar(); 
    } 

    public interface C extends A, B { 
    void baz(); 
    } 

    public void doIt(C c) { 
    c.foo(); 
    c.bar(); 
    c.baz(); 
    } 

    public static void main(String[] args) { 
    MyClass mc = new MyClass(); 

    mc.doIt(new C() { 
     @Override 
     public void foo() { 
     System.out.println("foo()"); 
     } 

     @Override 
     public void bar() { 
     System.out.println("bar()"); 
     } 

     @Override 
     public void baz() { 
     System.out.println("baz()"); 
     } 
    }); 
    } 

} 

この例の出力は次のとおりです。

foo() 
bar() 
baz() 
関連する問題