2011-08-05 2 views
1

아래 class A 안에 private 메서드가 있습니다.메서드 내에서 익명의 내부 클래스를 참조하는 개체를 "null"로 설정할 수 있습니까?

class A 
{ 
    //... 

    private void initPlay(final long duration) 
    { 
    myTimer = new Utils.Timer(duration) // non-static member variable 
    { 
     @Override 
     public void timerExpired(Object o) 
     { 
     // ... do something 
     myTimer = null; 
     initReplay(); // unrelated method 
     } 
    }; 
    } 
} 

myTimerUtils.Timer의 추상 메서드 timerExpired(Object)를 구현하는 무의식 내부 class를 참조합니다.

이제 타이머가 만료되고 해당 메소드가 호출되면 myTimer = null;를 간단히 설정합니다. 이 할당은 객체에 대한 참조가없고 GC가 발견 될 때마다 그것을 제거 할 수 있는지 확인하기 위해 수행됩니다.

괜찮습니까? 부작용이 있습니까 (null 체크 제외). 이미 치료를 받았습니까?

답변

1

myTimer 네, 당신이 할 수있는, 예를 (또는 정적) 변수 인 경우 -하지만 당신은 initPlay의 가능성을 두 번 호출되는 것을 조심해야합니다 - 초기 가비지 컬렉션 대상이되는 첫 번째 초래할 것이다 (타이머에 대한 참조가 없다고 가정).

0

로컬 변수 myTimer에 액세스해야하는 경우 myTimer 변수를 최종 키로 선언해야합니다. 그러나 그렇게하면 myTimer 로컬 변수를 재 할당 할 수 있습니다. 사실, 그렇게 할 필요는 없습니다. GC는 자동으로 수집합니다.