Spec-Zone.ru › Scala 2.13 Library

Объект scala.util.control.Exception

объект Exception

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

Каждый класс независимо комбинируемый.

Этот класс отличается от 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, который распаковывает исключения перед повторной передачей.

class AppException(cause: Throwable) extends RuntimeException(cause)

val unwrappingCatch: Catch[Nothing] = unwrapping(classOf[AppException])

def calcResult: Int = throw new AppException(new NullPointerException)

// Throws NPE not AppException,
//   java.lang.NullPointerException
//     at .calcResult(<console>:17)
val result = unwrappingCatch(calcResult)

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

val inputDefaulting: Catch[Int] = failAsValue(classOf[NumberFormatException])(0)
val candidatePick = "seven" // scala.io.StdIn.readLine()

// Int = 0
val pick = inputDefaulting(candidatePick.toInt)

Комбинируйте несколько 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"))
Источник
Exception.scala
Линейные надтипы
AnyRef, Any

Члены типа

класс 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

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

Attributes
protected[java.lang]
Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.CloneNotSupportedException]) @native()
Note

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

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 и нелокальными возвратами и исключениями зависят от платформы.

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

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

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

Возвращает представление runtime-класса объекта.

возвращает

объект класса, соответствующий типу runtime-объекта.

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

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.

возвращает

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

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

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

Definition Classes
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/util/control/Exception$.html

Spec-Zone.ru

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