Spec-Zone.ru › Scala 2.13 Library

Annotation scala.annotation.elidable

Companion object elidable

final class elidable extends Annotation with StaticAnnotation

Аннотация для методов, тела которых могут быть исключены из сгенерированного байткода компилятором.

Поведение зависит от передачи -Xelide-below <arg> в scalac. Вызовы методов, помеченных elidable (а также тела методов), будут опущены из сгенерированного кода, если приоритет аннотации ниже, чем заданный в командной строке.

@elidable(123)           // annotation priority
scalac -Xelide-below 456 // command line priority

Вызов метода будет заменён выражением, зависящим от типа удалённого выражения. В порядке убывания приоритета:

Unit            ()
Boolean         false
T <: AnyVal     0
T >: Null       null
T >: Nothing    Predef.???

Полный пример:

import scala.annotation._, elidable._
object Test extends App {
  def expensiveComputation(): Int = { Thread.sleep(1000) ; 172 }

  @elidable(WARNING) def warning(msg: String) = println(msg)
  @elidable(FINE) def debug(msg: String)      = println(msg)
  @elidable(FINE) def computedValue           = expensiveComputation()

  warning("Warning! Danger! Warning!")
  debug("Debug! Danger! Debug!")
  println("I computed a value: " + computedValue)
}
% scalac example.scala && scala Test
Warning! Danger! Warning!
Debug! Danger! Debug!
I computed a value: 172

// INFO lies between WARNING and FINE
% scalac -Xelide-below INFO example.scala && scala Test
Warning! Danger! Warning!
I computed a value: 0

Обратите внимание, что только конкретные методы могут быть помечены @elidable. Не аннотированный метод не будет исключён, даже если он переопределяет/реализует метод с этой аннотацией.

Также обратите внимание, что статический тип определяет, какие аннотации учитываются:

import scala.annotation._, elidable._
class C { @elidable(0) def f(): Unit = ??? }
object O extends C { override def f(): Unit = println("O.f") }
object Test extends App {
  O.f()      // not elided
  (O: C).f() // elided if compiled with `-Xelide-below 1`
}
Source
elidable.scala
Since

2.8

Linear Supertypes
StaticAnnotation, Annotation, AnyRef, Any

Значения членов

final def !=(arg0: Any): Boolean

Проверка двух объектов на неравенство.

возвращает

true если !(this == that), в противном случае false.

Классы определений
AnyRef → Any

final def ##(): Int

Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для числовых типов возвращает значение хэша, которое соответствует равенству значений: если два экземпляра типов значений сравниваются как true, то ## будет генерировать одинаковое значение хэша для каждого из них. Для null возвращает хэш-код, где null.hashCode выбросит NullPointerException.

возвращает

значение хэша, соответствующее ==

Классы определений
AnyRef → Any

def +(other: String): String

Неявный
Этот член добавлен неявным преобразованием из elidable в any2stringadd[elidable] выполняемым методом any2stringadd в scala.Predef.
Классы определений
any2stringadd

def ->[B](y: B): (elidable, B)

Неявный
Этот член добавлен неявным преобразованием из elidable в ArrowAssoc[elidable] выполняемым методом ArrowAssoc в scala.Predef.
Классы определений
ArrowAssoc
Аннотации
@inline()

final def ==(arg0: Any): Boolean

Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).

возвращает

true если объект-получатель эквивалентен аргументу; false в противном случае.

Классы определений
AnyRef → Any

final def asInstanceOf[T0]: T0

Преобразование объекта-получателя к типу T0.

Обратите внимание, что успех преобразования во время выполнения зависит от семантики стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит ClassCastException во время выполнения, а выражение List(1).asInstanceOf[List[String]] — нет. В последнем примере, поскольку тип аргумента стирается во время компиляции, невозможно проверить, соответствуют ли содержимое списка нужному типу.

возвращает

объект-получатель.

Классы определений
Any
Исключения

ClassCastException если объект-получатель не является экземпляром стирания типа T0.

def clone(): AnyRef

Создать копию объекта-получателя.

По умолчанию реализация метода clone зависит от платформы.

возвращает

копию объекта-получателя.

Атрибуты
protected[java.lang]
Классы определений
AnyRef
Аннотации
@throws(classOf[java.lang.CloneNotSupportedException]) @native()
Примечание

не указано SLS в качестве члена AnyRef

def ensuring(cond: (elidable) => Boolean, msg: => Any): elidable

Неявный
Этот член добавлен неявным преобразованием из elidable в Ensuring[elidable] выполняемым методом Ensuring в scala.Predef.
Классы определений
Ensuring

def ensuring(cond: (elidable) => Boolean): elidable

Неявный
Этот член добавлен неявным преобразованием из elidable в Ensuring[elidable] выполняемым методом Ensuring в scala.Predef.
Классы определений
Ensuring

def ensuring(cond: Boolean, msg: => Any): elidable

Неявный
Этот член добавлен неявным преобразованием из elidable вEnsuring[elidable] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: Boolean): elidable

Неявный
Этот член добавлен неявным преобразованием из elidable вEnsuring[elidable] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

final def eq(arg0: AnyRef): Boolean

Проверяет, является ли аргумент (that) ссылкой на объект-приемник (this).

Метод eq реализует отношение эквивалентности на непустых экземплярах AnyRef, и имеет три дополнительных свойства:

    Он согласован: для любых непустых экземпляров x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false.Для любого непустого экземпляра x типа AnyRef, x.eq(null) и null.eq(x) возвращает false. null.eq(null) возвращает true.

При переопределении методов equals или hashCode важно гарантировать, что их поведение согласуется с равенством ссылок. Поэтому, если два объекта являются ссылками друг на друга (o1 eq o2), они должны быть равны друг другу (o1 == o2) и они должны иметь одинаковое значение хеш-кода (o1.hashCode == o2.hashCode).

возвращает

true если аргумент является ссылкой на объект-приемник; false в противном случае.

Определяющие классы
AnyRef

def equals(arg0: AnyRef): Boolean

Метод равенства для типов ссылок. Реализация по умолчанию делегирует вызов eq.

См. также equals в scala.Any.

возвращает

true если объект-приемник эквивалентен аргументу; false в противном случае.

Определяющие классы
AnyRef → Any

def finalize(): Unit

Вызывается сборщиком мусора для объекта-приемника, когда больше нет ссылок на объект.

Подробности о том, когда и если вызывается метод finalize, а также взаимодействие между finalize и нелокальными возвратами и исключениями, зависят от платформы.

Атрибуты
protected[java.lang]
Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.Throwable])
Примечание

не указано в SLS как член AnyRef

def formatted(fmtstr: String): String

Возвращает строку, отформатированную в соответствии с заданной строкой format. Строки форматирования соответствуют строкам форматирования String.format (@см java.lang.String.format).

Неявный
Этот член добавлен неявным преобразованием из elidable вStringFormat[elidable] с помощью метода StringFormat в scala.Predef.
Определяющие классы
StringFormat
Аннотации
@inline()

final def getClass(): Class[_ <: AnyRef]

Возвращает представление класса во время выполнения объекта.

возвращает

объект класса, соответствующий типу времени выполнения получателя.

Определяющие классы
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Метод hashCode для типов ссылок. См. hashCode в scala.Any.

возвращает

значение хеш-кода для этого объекта.

Определяющие классы
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

Проверка, является ли динамический тип объекта-приемника T0.

Обратите внимание, что результат проверки зависит от семантики стирания в Scala. Поэтому выражение 1.isInstanceOf[String] вернет false, а выражение List(1).isInstanceOf[List[String]] вернет true. В последнем примере, из-за стирания типа аргумента во время компиляции, невозможно проверить, относятся ли элементы списка к указанному типу.

возвращает

true если объект-приемник является экземпляром стирания типа T0; false в противном случае.

Определяющие классы
Any

final val уровень: Int

final def неравенство(arg0: AnyRef): Boolean

Эквивалентно !(this eq that).

возвращает

true если аргумент не является ссылкой на объект-получатель; false в противном случае.

Классы-определения
AnyRef

final def уведомить(): Unit

Разбуждает единственную нить, ожидающую монитора объекта-получателя.

Классы-определения
AnyRef
Аннотации
@native()
Примечание

не указано SLS как член AnyRef

final def уведомитьВсе(): Unit

Разбуждает все нити, ожидающие монитора объекта-получателя.

Классы-определения
AnyRef
Аннотации
@native()
Примечание

не указано SLS как член AnyRef

final def синхронизированно[T0](arg0: => T0): T0

Классы-определения
AnyRef

def представлениеВСтроке(): String

Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java это конкатенация имени класса, «@» и хэш-кода объекта в шестнадцатеричном формате.

возвращает

строковое представление объекта.

Классы-определения
AnyRef → Any

final def подождать(): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def подождать(arg0: Long, arg1: Int): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def подождать(arg0: Long): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException]) @native()

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/annotation/elidable.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API