2016-06-12 4 views
0

핸들러으로 가고 있었는데, 그 안에 post 메소드는 Runnable 타입의 매개 변수를 받아 들였다. 내가 이후 지금 안드로이드에서의 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의 새로운 인스턴스를 만들 수 있습니다,
자바인터페이스입니다 Runnable를 있어요?

+0

이이라고 Runnable 인터페이스의 구현은 클래스를 다른 곳에서 선언하는 것이 아니라 인라인됩니다. – Karakuri

+1

[ "implements Runnable"vs. "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()