Утечка памяти при использовании NSURLSession.downloadTaskWithURL

Это явно указано в спецификации , и они автоматически окончательны:

Члены конечных классов или объектов также неявно также окончательны, поэтому final модификатор, как правило, также избыточен для них. Однако обратите внимание, что для определения постоянных значений (§ 4.1) требуется явный модификатор final, даже если они определены в конечном классе или объекте.

blockquote>

Ваш final -less пример компилируется без ошибок (или предупреждений) с помощью 2.10-M7, поэтому я предполагаю, что существует проблема с проверкой @switch в более ранних версиях и что члены фактически являются окончательными.


Обновление: на самом деле это более любопытно, чем я ожидал, - если мы скомпилируем следующее: либо 2.9.2, либо 2.10-M7:

object NonFinal {
  val a = 0
}

object Final {
  final val a = 0
}

javap показывает разницу:

public final class NonFinal$ implements scala.ScalaObject {
  public static final NonFinal$ MODULE$;
  public static {};
  public int a();
}

public final class Final$ implements scala.ScalaObject {
  public static final Final$ MODULE$;
  public static {};
  public final int a();
}

Вы видите то же самое, даже если правая часть определения значений не является постоянным выражением.

Итак, я оставлю свой ответ, но это не является окончательным.

13
задан Fygo 29 January 2015 в 22:33
поделиться