2016-06-12 87 views
0

我正在通過處理程序,其中的post方法接受Runnable類型的參數。還有我碰到瞭解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); 
     } 
    }); 

來到現在,因爲一個下面的代碼片段的Runnable的Java接口,我們如何能夠直接創建Runnable接口的新實例?

+0

這就是所謂的 「匿名內部類。」 Runnable接口的實現是內聯的,而不是在別處聲明一個類。 – Karakuri

+1

請參閱[「實現Runnable」與「擴展線程」](http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread) – mjn

回答

1

匿名類可以實現接口,這是唯一一次你會看到一個類實現一個沒有「實現」關鍵字的接口。

一個完整的例子可能看起來像:

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()