Объект scala.util.control.Exception
объект Exception
Члены типа
класс By[T, R] extends AnyRef
класс Catch[+T] extends Described
Контейнерный класс для логики catch/finally.
Передайте другое значение для rethrow, если вы хотите, вероятно, неосмотрительно разрешить захват исключений управления и других объектов throwables, которые остальная часть мира может ожидать получить.
- T
тип результата тел, используемых в блоках try и catch
тип Catcher[+T] = PartialFunction[Throwable, T]
трайт Described extends AnyRef
класс Finally extends Described
Члены-значения
final def !=(arg0: Any): Boolean
Проверка двух объектов на неравенство.
- returns
trueесли !(this == that), в противном случае false.
- Definition Classes
- AnyRef → Any
final def ##(): Int
Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для числовых типов возвращается значение хеша, которое соответствует равенству значений: если два экземпляра типа значения сравниваются как true, то ## вернет одинаковое значение хеша для каждого из них. Для null возвращает код хеша, где null.hashCode вызывает NullPointerException.
- returns
значение хеша, согласованное с ==
- Definition Classes
- AnyRef → Any
final def ==(arg0: Any): Boolean
Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).
- returns
trueесли объект-получатель эквивалентен аргументу;falseв противном случае.
- Definition Classes
- AnyRef → Any
final def allCatch[T]: Catch[T]
final def allCatcher[T]: Catcher[T]
final def asInstanceOf[T0]: T0
Приведение объекта-получателя к типу T0.
Обратите внимание, что успех приведения во время выполнения зависит от семантики стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит исключение ClassCastException во время выполнения, а выражение List(1).asInstanceOf[List[String]] не выбросит. В последнем примере, так как тип аргумента стирается во время компиляции, невозможно проверить, соответствуют ли содержимое списка требуемому типу.
- returns
объект-получатель.
- Definition Classes
- Any
- Исключения
ClassCastExceptionесли объект-получатель не является экземпляром стираемого типаT0.
def catching[T](c: Catcher[T]): Catch[T]
def catching[T](exceptions: Class[_]*): Catch[T]
Создаёт объект Catch, который будет перехватывать любое из указанных исключений. Поскольку возвращённый объект Catch не имеет определённой логики и просто перебросит перехваченные исключения, вам обычно нужно будет вызвать opt, either или withTry на возвращаемом значении или назначить пользовательскую логику, вызвав «withApply».
Обратите внимание, что объекты Catch автоматически перебрасывают ControlExceptions и другие, которые должны перехватываться только в исключительных случаях. Если вы действительно хотите перехватить именно то, что указали, используйте catchingPromiscuously вместо этого.
def catchingPromiscuously[T](c: Catcher[T]): Catch[T]
def catchingPromiscuously[T](exceptions: Class[_]*): Catch[T]
Создаёт объект Catch , который будет перехватывать любое из переданных исключений. В отличие от "catching", который фильтрует те, которые указаны в shouldRethrow, этот перехватывает всё, что вы запросили, включая ControlThrowable или InterruptedException.
def clone(): AnyRef
Создаёт копию объекта-получателя.
Реализация метода clone по умолчанию зависит от платформы.
- returns
копию объекта-получателя.
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 failAsValue[T](exceptions: Class[_]*)(value: => T): Catch[T]
def failing[T](exceptions: Class[_]*): Catch[Option[T]]
def finalize(): Unit
Вызывается сборщиком мусора для объекта-получателя, когда на объект больше нет ссылок.
Подробности о том, когда и если вызывается метод finalize, а также взаимодействие между finalize и нелокальными возвратами и исключениями зависят от платформы.
final def getClass(): Class[_ <: AnyRef]
Возвращает представление runtime-класса объекта.
- возвращает
объект класса, соответствующий типу runtime-объекта.
def handling[T](exceptions: Class[_]*): By[(Throwable) => T, Catch[T]]
Возвращает частично сконструированный объект Catch, которому необходимо указать функцию обработки исключений в качестве аргумента для by.
handling(classOf[MalformedURLException], classOf[NullPointerException]) by (_.printStackTrace)
def hashCode(): Int
Метод hashCode для типов ссылок. См. hashCode в scala.Any.
- возвращает
значение кода хэша для данного объекта.
def ignoring(exceptions: Class[_]*): Catch[Unit]
final def isInstanceOf[T0]: Boolean
Проверка, является ли динамический тип объекта-получателя T0.
Обратите внимание, что результат теста зависит от правил стирания Scala. Таким образом, выражение 1.isInstanceOf[String] вернёт false, в то время как выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере, из-за стирания типа аргумента в ходе компиляции, невозможно проверить, содержат ли элементы списка заданный тип.
- возвращает
trueесли объект-получатель является экземпляром стирания типаT0;falseв противном случае.
- Классы-определения
- Any
def mkCatcher[Ex <: Throwable, T](isDef: (Ex) => Boolean, f: (Ex) => T)(implicit arg0: ClassTag[Ex]): PartialFunction[Throwable, T]
def mkThrowableCatcher[T](isDef: (Throwable) => Boolean, f: (Throwable) => T): PartialFunction[Throwable, T]
final def ne(arg0: AnyRef): Boolean
Равносильно !(this eq that).
- возвращает
trueесли аргумент не является ссылкой на объект-приёмник;falseв противном случае.
- Definition Classes
- AnyRef
final val noCatch: Catch[Nothing]
final def nonFatalCatch[T]: Catch[T]
final def nonFatalCatcher[T]: Catcher[T]
final val nothingCatcher: Catcher[Nothing]
final def notify(): Unit
Разбуждает единственную нить, ожидающую монитора объекта-приёмника.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Примечание
не определён в SLS как член AnyRef
final def notifyAll(): Unit
Разбуждает все нити, ожидающие монитора объекта-приёмника.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Примечание
не определён в SLS как член AnyRef
def shouldRethrow(x: Throwable): Boolean
!!! Не уверен(а) во всех факторах, которые влияют на это, и/или нужны ли различные стандартные варианты.
- возвращает
true, если
xявляетсяControlThrowableилиInterruptedException, иначе false.
final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
implicit def throwableSubtypeToCatcher[Ex <: Throwable, T](pf: PartialFunction[Ex, T])(implicit arg0: ClassTag[Ex]): Catcher[T]
def toString(): String
Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java это конкатенация имени класса, «@» и хэш-кода объекта в шестнадцатеричном формате.
- возвращает
строковое представление объекта.
- Definition Classes
- AnyRef → Any
def ultimately[T](body: => Unit): Catch[T]
def unwrapping[T](exceptions: Class[_]*): Catch[T]
final def wait(): Unit
- Definition Classes
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
© 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/util/control/Exception$.html
Классы, представляющие компоненты обработки исключений.
Каждый класс независимо комбинируемый.
Этот класс отличается от scala.util.Try тем, что он фокусируется на комбинировании обработчиков исключений, а не на комбинировании поведения. Всё поведение должно быть скомпоновано вначале и передано объекту Catch с помощью одного из методов
opt,eitherилиwithTry. Вместе эти классы предоставляют DSL для комбинирования поведения catch и finally.Примеры
Создайте
Catch, который обрабатывает указанные исключения.import scala.util.control.Exception._ import java.net._ val s = "http://www.scala-lang.org/" // Some(http://www.scala-lang.org/) val x1: Option[URL] = catching(classOf[MalformedURLException]) opt new URL(s) // Right(http://www.scala-lang.org/) val x2: Either[Throwable,URL] = catching(classOf[MalformedURLException], classOf[NullPointerException]) either new URL(s) // Success(http://www.scala-lang.org/) val x3: Try[URL] = catching(classOf[MalformedURLException], classOf[NullPointerException]) withTry new URL(s) val defaultUrl = new URL("http://example.com") // URL(http://example.com) because htt/xx throws MalformedURLException val x4: URL = failAsValue(classOf[MalformedURLException])(defaultUrl)(new URL("htt/xx"))Создайте
Catch, который регистрирует исключения с использованиемhandlingиby.def log(t: Throwable): Unit = t.printStackTrace val withThrowableLogging: Catch[Unit] = handling(classOf[MalformedURLException]) by (log) def printUrl(url: String) : Unit = { val con = new URL(url) openConnection() val source = scala.io.Source.fromInputStream(con.getInputStream()) source.getLines.foreach(println) } val badUrl = "htt/xx" // Prints stacktrace, // java.net.MalformedURLException: no protocol: htt/xx // at java.net.URL.<init>(URL.java:586) withThrowableLogging { printUrl(badUrl) } val goodUrl = "http://www.scala-lang.org/" // Prints page content, // <!DOCTYPE html> // <html> withThrowableLogging { printUrl(goodUrl) }Используйте
unwrapping, чтобы создатьCatch, который распаковывает исключения перед повторной передачей.Используйте
failAsValue, чтобы предоставить значение по умолчанию, когда поймано указанное исключение.Комбинируйте несколько
Catchсor, чтобы создатьCatch, который предоставляет значения по умолчанию, варьирующиеся в зависимости от исключения.val formatDefaulting: Catch[Int] = failAsValue(classOf[NumberFormatException])(0) val nullDefaulting: Catch[Int] = failAsValue(classOf[NullPointerException])(-1) val otherDefaulting: Catch[Int] = nonFatalCatch withApply(_ => -100) val combinedDefaulting: Catch[Int] = formatDefaulting or nullDefaulting or otherDefaulting def p(s: String): Int = s.length * s.toInt // Int = 0 combinedDefaulting(p("tenty-nine")) // Int = -1 combinedDefaulting(p(null: String)) // Int = -100 combinedDefaulting(throw new IllegalStateException) // Int = 22 combinedDefaulting(p("11"))