2016-06-12 5 views
0

Я проходил через Обработчики, метод post в нем принимает параметр типа Runnable. Там в следующем фрагменте кода я наткнулсяПонимание Runnable в Android

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" vs. "extends Thread"] (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() 
Смежные вопросы