ここに囲まれているインスタンスは、囲まれたインスタンスが有効な限りガベージコレクションの対象にはなりません。インスタンスを囲むための回避策はガベージコレクションの対象外です
interface Foo<T> {
T compute();
default Foo<T> memoize() {
return new Foo<>() {
T result = null;
boolean cached = false;
@Override
public T compute() {
if (!cached) {
result = Foo.this.compute();
cached = true;
}
return result;
}
};
}
}
これはその問題を解決していますか?
interface Foo<T> {
T compute();
default Foo<T> memoize() {
return Foo.memoize(this);
}
private static <T> Foo<T> memoize(Foo<T> original) {
class Bar implements Foo<T> {
T result = null;
Foo<T> foo;
Bar(Foo<T> original) {
foo = original;
}
@Override
public T compute() {
if (foo != null) {
result = foo.compute();
foo = null;
}
return result;
}
}
return new Bar(original);
}
}
これは[minimal](https://stackoverflow.com/help/mcve)ですか? – Michael
@Michael私はそう信じています。 – gdejohn