2012-03-22 4 views
16

가능한 중복 : 나는 참조의 다른 유형에 대해 읽고
Have you ever used Phantom reference in any project?Java에서 팬텀 참조를 사용하는 경우는 언제입니까?

. 나는 강하고 부드럽고 약한 참조가 어떻게 작용하는지 이해합니다.

그러나 팬텀 참고 자료를 읽었을 때 실제로 이해할 수 없었습니다. 어쩌면 내가 그들의 목적이 무엇인지, 언제 사용하는지 보여주는 좋은 예를 찾을 수 없었기 때문일 것입니다.

팬텀 레퍼런스를 사용하는 코드 예제를 보여줄 수 있습니까?

+0

또는 아마도 : http://stackoverflow.com/questions/1599069/have-youever-used-phantom-reference-in-any-project –

+0

짧은 대답 : 거의 용도가 없습니다. 'finalize '를 오버라이드하는 것보다 파이널 라이 제이션에 대한 더 안전하고 안전한 접근법. –

+0

@ 루이스 와서 만 당신에게 세부적인 예를 들어 줄 수 있어요. 나는 그것을 볼 수 있기를 희망한다. 덕분에 :) (방금 대신 파이널 참조를 사용하여 마무리하는 대신 사용하십시오) – hqt

답변

11

본인은 본 적이 없습니다. 극히 소수의 사람들이 필요합니다. 그러나 으로 생각합니다.

abstract class ConnectionReference extends PhantomReference<Connection> { 
    abstract void cleanUp(); 
} 
... 
ReferenceQueue<Connection> connectionQueue = new ReferenceQueue<>(); 
... 
Connection newConnection = ... 
ConnectionReference ref = new ConnectionReference(newConnection, connectionQueue, ...); 
... 
// draining the queue in some thread somewhere... 
Reference<? extends Connection> reference = connectionQueue.poll(); 
if (reference != null) { 
    ((ConnectionReference) reference).cleanUp(); 
} 
... 

이것은 다소 this post과 비슷합니다.