2012-03-22 16 views
16

Olası Çoğalt: Ne referans farklı türleri hakkında okudum
Have you ever used Phantom reference in any project?Java'da phantom referanslarını ne zaman kullanmalısınız?

. Güçlü, zayıf ve zayıf referansların ne kadar çalıştığını anlıyorum.

Fakat hayalet referansları okurken onları gerçekten anlayamadım. Belki de amacının ne olduğunu veya ne zaman kullanacağını gösteren iyi bir örnek bulamadığım için.

Bana bir hayalet başvuru kullanan bazı kod örneklerini gösterir misiniz?

+0

Veya muhtemelen: http://stackoverflow.com/questions/1599069/have-you-ever-used-phantom-reference-in-any-project –

+0

Kısa yanıt: Hemen hemen hiç uygulama yok; Son haline getirilmeden daha kesin, daha güvenli bir yaklaşım. –

+0

@LouisWasserman bana bir detay örneği verebilir misiniz, lütfen. Bunu görmeyi umuyorum. teşekkürler :) (sadece bana sonlandırmak yerine phantom referansını nasıl kullanalım) – hqt

cevap

11

Bunu kendim hiç yapmadım - çok az insanın buna ihtiyacı var - ama ben düşünün bunu yapmanın bir yoludur.

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(); 
} 
... 

Bu daha fazla veya this post anlaşılacağı daha az benzerdir.

İlgili konular