2013-07-05 2 views
4

다음 코드 줄을 줄이려고합니다. 클래스를 선언 한 다음 실행 메소드를 실행하기 위해 클래스의 인스턴스를 작성할 필요가 없습니다. 클래스를 정의하고 하나의 구조로 인스턴스를 작성할 수 있도록 코드를 작성할 수 있어야합니다. 실제로 runOnUiThread가 필요하지만 클래스 정의와 인스턴스화를 결합하는 압축 된 방법을 찾고 있습니다. 나는 그것이 어딘가에 수행하지만 어떻게하는지 회수 할 수 없습니다 본 적이 :클래스를 정의하고 하나의 생성물로 인스턴스를 만드는 방법

class OnRunnableCompleted implements Runnable 
{ 
    @Override 
    public void run() 
    { 
    } 
} 

OnRunnableCompleted onRunnableCompleted = new OnRunnableCompleted(); 
runOnUiThread(onRunnableCompleted); 

답변

12
runOnUiThread(new Runnable() { public void run() {} }); 

이것은 Runnable 인터페이스를 구현하고 어떤 조합은없는 추상 run() 방법을 겹쳐 anonymous class을 만듭니다.

익명 클래스의 일반적인 형태는 N ...

  1. Name는 인터페이스 또는 구현/확장하는 클래스의 이름

    new Name(superCtorParam0, superCtorParam1) { 
        member0; 
        member1; 
    } 
    

    ,

  2. superCtorParamName의 생성자에 대한 매개 변수입니다.
  3. member 0 ... N
+0

한다. 나는 그것이 "익명의 계급"이라고 불리는 것을 잊었다. – AndroidDev

2

어떻게 ...

Runnable calculatePI = new Runnable(){ 
    public void run(){/*calculate pi*/} 
} 
//Any time you need to calculate pi 
runOnUiThread(calculatePI); 

이이 감소 다른 모든 클래스 선언에서 같은 필드, 메소드, 초기화, 익명 클래스의 내부 클래스입니다 익명의 클래스를 반복적으로 생성하는 것을 방지합니다. 내 안드로이드 개발에서 나는이 솔루션을 꽤 자주 사용합니다. 잘 작동합니다.

+0

"익명 클래스의 반복 된 생성 방지"란 무엇을 의미합니까? 그리고 그것을 반복해도 문제가되는 것은 정확히 무엇입니까? – AndroidDev

+0

GUI를 자주 업데이트 할 경우 낭비가 적어지고 코드 로직이 단순 해집니다. Mike가 익명의 클래스 쿼리에 응답했다고 생각합니다. –

+0

"쓰레기를 줄이십시오"는 의미는 무엇입니까? 익명의 클래스가 더 많은 쓰레기를 생성한다고 말하고 있습니까? – AndroidDev

0

는 JDK 8에서 당신은 같은 것을 할 수 있습니다

yourMethod(() -> System.out.println("RUN!")); 
+0

runOnUiThread 함수가 JDK 8에 있습니까? 나는 그것의 안드로이드 생각. –

+0

그냥 예입니다. 더 많은 OP가 안드로이드에 대해서, 자바에 대해서만 말하지 않기 때문에. – Divers

+0

Android 개발이 명시 적으로 지정되지 않았기 때문에 감사하고 보증합니다. +1 –

0

사용 anonymus 클래스를 그것 뿐이다

runOnUiThread(new Runnable() { public void run() {} }); 
관련 문제