18

さまざまな種類のリファレンスについて読みました。強い参照、弱い参照、弱い参照がどのように機能するかを理解しています。

しかし、ファントムリファレンスについて読んだとき、私はそれらを本当に理解できませんでした. たぶん、それらの目的が何であるか、またはそれらをいつ使用するかを示す良い例を見つけることができなかったからです.

ファントム参照を使用するコード例をいくつか示していただけますか?

4

1 に答える 1

11

私はこれを自分でやったことがありません - それを必要とする人はほとんどいません - しかし、これはそれを行う 1 つの方法だと思います。

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

これは、この投稿が示唆するものと多かれ少なかれ似ています。

于 2012-03-22T17:45:15.723 に答える