Есть ли какие-нибудь существенные причины для использования
typeof variable === 'function'
вместо
!!variable.call
для определения того, является ли переменная функцией?
Помимо очевидного, что кто-то может создать объект вроде:
{ call: 1 }
У меня проблема в том, что
typeof /regex/ === 'function'
возвращает истину, object, «bar» и передав ему Callable. После этого foo вернется bar, а затем я хочу, чтобы foo стал недоступным (например: ...
Я работаю с некоторым кодом, в котором один объект "foo" создает другой
object, "bar" и передав ему Callable
. После этого foo вернется
bar, а затем я хочу, чтобы foo стал недоступным (т.е. доступным для
сборщик мусора).
Моя первоначальная мысль заключалась в том, чтобы просто анонимно создать Callable
. например:
class Foo {
...
public Bar createBar() {
final int arg1 = ...
final int arg2 = ...
final int arg3 = ...
return new Callable<Baz>() {
@Override
public Baz call() {
return new Baz(arg1, arg2, arg3);
}
};
}
}
Мне пришло в голову, что это может не работать должным образом, однако,
поскольку внутренний класс обычно сохраняет ссылку на свой включающий объект.
Мне не нужна здесь ссылка на закрывающий класс, потому что я хочу, чтобы закрывающий объект был
собирается, пока вызываемый
все еще доступен.
С другой стороны, обнаружение того, что включающий экземпляр никогда не упоминается должно быть довольно тривиальным, поэтому, возможно, компилятор Java достаточно умен не включать ссылку в этом случае.
Итак ... будет ли экземпляр анонимного внутреннего класса удерживать ссылка на его включающий экземпляр, даже если он никогда не использует включающая ссылку на экземпляр?