Класс scala.util.Try
Компаньон объект Try
sealed abstract класс Try[+T] extends Product with Serializable
Члены типа
final class WithFilter extends AnyRef
Абстрактные члены значения
abstract def canEqual(that: Any): Boolean
Метод, который должен вызываться из любого хорошо спроектированного метода equals, который можно переопределить в подклассе. См. Programming in Scala, Глава 28 для обсуждения и проектирования.
- that
значение, которое проверяется на возможность равенства
- возвращает
true, если этот экземпляр может быть равен
that, иначе false
- Определяющие классы
- Equals
abstract def collect[U](pf: PartialFunction[T, U]): Try[U]
abstract def failed: Try[Throwable]
Инвертирует этот Try. Если это Failure, возвращает его исключение, заключенное в Success. Если это Success, возвращает Failure, содержащий UnsupportedOperationException.
abstract def filter(p: (T) => Boolean): Try[T]
abstract def flatMap[U](f: (T) => Try[U]): Try[U]
abstract def flatten[U](implicit ev: <:<[T, Try[U]]): Try[U]
abstract def fold[U](fa: (Throwable) => U, fb: (T) => U): U
Применяет fa, если это Failure, или fb, если это Success. Если fb первоначально применяется и вызывает исключение, то fa применяется с этим исключением.
- fa
функция, которая применяется, если это
Failure- fb
функция, которая применяется, если это
Success- возвращает
результаты применения функции
val result: Try[Int] = Try { string.toInt }
log(result.fold(
ex => "Operation failed with " + ex,
v => "Operation produced value: " + v
))
abstract def foreach[U](f: (T) => U): Unit
Применяет заданную функцию f если это Success, иначе возвращает Unit, если это Failure.
Примечание: Если f вызывает исключение, то этот метод может вызвать исключение.
abstract def get: T
abstract def getOrElse[U >: T](default: => U): U
Возвращает значение из этого Success или заданный default аргумент, если это Failure.
Примечание: Это выбросит исключение, если это не успех, а default вызывает исключение.
abstract def isFailure: Boolean
abstract def isSuccess: Boolean
abstract def map[U](f: (T) => U): Try[U]
abstract def orElse[U >: T](default: => Try[U]): Try[U]
abstract def productArity: Int
Размер этого продукта.
- возвращает
для продукта
A(x1, ..., xk), возвращаетk
- Определяющие классы
- Product
abstract def productElement(n: Int): Any
Элемент с индексом n в этом произведении, нумерация с 0. Другими словами, для произведения A(x1, ..., xk), возвращает x(n+1), где 0 <= n < k.
- n
индекс возвращаемого элемента
- returns
элемент
nэлементов после первого элемента
- Definition Classes
- Product
- Исключения
IndexOutOfBoundsException, если индексnнаходится вне диапазона (n < 0 || n >= productArity).
abstract def recover[U >: T](pf: PartialFunction[Throwable, U]): Try[U]
Применяет заданную функцию f если текущее значение является Failure, иначе возвращает текущее значение, если текущее значение является Success. Это аналог map для обработки исключений.
abstract def recoverWith[U >: T](pf: PartialFunction[Throwable, Try[U]]): Try[U]
Применяет заданную функцию f если текущее значение является Failure, иначе возвращает текущее значение, если текущее значение является Success. Это аналог flatMap для обработки исключений.
abstract def toEither: Either[Throwable, T]
abstract def toOption: Option[T]
abstract def transform[U](s: (T) => Try[U], f: (Throwable) => Try[U]): Try[U]
Члены-значения конкретного типа
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
def +(other: String): String
- Implicit
- Этот член добавлен неявным преобразованием из Try[T] в any2stringadd[Try[T]] с помощью метода any2stringadd в scala.Predef.
- Definition Classes
- any2stringadd
def ->[B](y: B): (Try[T], B)
- Implicit
- Этот член добавлен неявным преобразованием из Try[T] в ArrowAssoc[Try[T]] с помощью метода ArrowAssoc в scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
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 asInstanceOf[T0]: T0
Приведение объекта-получателя к типу T0.
Обратите внимание, что успех приведения во время выполнения зависит от семантики стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит ClassCastException во время выполнения, в то время как выражение List(1).asInstanceOf[List[String]] не выбросит. В последнем примере, поскольку аргумент типа стёрт во время компиляции, невозможно проверить, являются ли содержимое списка запрошенного типа.
- returns
объект-получатель.
- Definition Classes
- Any
- Исключения
ClassCastException, если объект-получатель не является экземпляром стирания типаT0.
def clone(): AnyRef
Создаёт копию объекта-получателя.
Значение метода clone зависит от платформы.
- returns
копию объекта-получателя.
def ensuring(cond: (Try[T]) => Boolean, msg: => Any): Try[T]
- Implicit
- Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода Ensuring в scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: (Try[T]) => Boolean): Try[T]
- Implicit
- Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода Ensuring в scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean, msg: => Any): Try[T]
- Неявный
- Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода Ensuring в scala.Predef.
- Определяющие классы
- Ensuring
def ensuring(cond: Boolean): Try[T]
- Неявный
- Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода 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 с нелокальными возвратами и исключениями зависят от платформы.
def formatted(fmtstr: String): String
Возвращает строку, отформатированную в соответствии с заданной строкой format. Строки форматов такие же, как для String.format (@см java.lang.String.format).
- Неявный
- Этот член добавлен неявным преобразованием из Try[T] в StringFormat[Try[T]] с помощью метода StringFormat в scala.Predef.
- Определяющие классы
- StringFormat
- Аннотации
- @inline()
final def getClass(): Class[_ <: AnyRef]
Возвращает представление класса времени выполнения объекта.
- возвращает
объект класса, соответствующий типу времени выполнения получателя.
def hashCode(): Int
Метод hashCode для ссылочных типов. См. hashCode в scala.Any.
- возвращает
значение хэш-кода для этого объекта.
final def isInstanceOf[T0]: Boolean
Проверяет, является ли динамический тип объекта-получателя T0.
Обратите внимание, что результат проверки зависит от семантики стирания Scala. Таким образом, выражение 1.isInstanceOf[String] вернет false, в то время как выражение List(1).isInstanceOf[List[String]] вернет true. В последнем примере, поскольку аргумент типа стирается во время компиляции, невозможно проверить, соответствуют ли элементы списка указанному типу.
- возвращает
true, если объект-получатель является экземпляром стирания типаT0;falseв противном случае.
- Классы-определения
- Any
final def ne(arg0: AnyRef): Boolean
Эквивалентно !(this eq that).
- возвращает
true, если аргумент не является ссылкой на объект-получатель;falseв противном случае.
- Классы-определения
- AnyRef
final def notify(): Unit
Разбуживает один поток, ожидающий монитора объекта-получателя.
- Классы-определения
- AnyRef
- Аннотации
- @native()
- Примечание
не указано SLS в качестве члена AnyRef
final def notifyAll(): Unit
Разбуживает все потоки, ожидающие монитора объекта-получателя.
- Классы-определения
- AnyRef
- Аннотации
- @native()
- Примечание
не указано SLS в качестве члена AnyRef
def productElementName(n: Int): String
Имя n-го элемента этого продукта, нумерация с 0. В стандартной реализации пустая строка.
- n
индекс имени элемента, который нужно вернуть
- возвращает
имя указанного элемента
- Классы-определения
- Product
- Исключения
IndexOutOfBoundsException, если индексnвне диапазона (n < 0 || n >= productArity).
def productElementNames: Iterator[String]
Итератор по именам всех элементов этого продукта.
- Классы-определения
- Product
def productIterator: Iterator[Any]
Итератор по всем элементам этого продукта.
- возвращает
в стандартной реализации, итератор
Iterator[Any]
- Классы-определения
- Product
def productPrefix: String
Строка, используемая в методах toString производных классов. Реализации могут переопределить этот метод, чтобы добавить префикс строки к результату методов toString.
- возвращает
в стандартной реализации, пустая строка
- Классы-определения
- Product
final def synchronized[T0](arg0: => T0): T0
- Классы-определения
- AnyRef
def toString(): String
Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java это конкатенация имени класса, «@» и хэш-кода объекта в шестнадцатеричном формате.
- возвращает
строковое представление объекта.
- Классы-определения
- AnyRef → Any
final def wait(): Unit
- Классы-определения
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Классы-определения
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
final def withFilter(p: (T) => Boolean): WithFilter
Создаёт нестрогий фильтр, который в конечном итоге преобразует это в Failure если предикат не выполняется.
Примечание: в отличие от filter, withFilter не создаёт новую Try. Вместо этого он ограничивает область действия последующих map, flatMap, foreach, и withFilter операций.
Так как Try — это коллекция из одного элемента, это может быть немного избыточно, но это согласуется с withFilter на Option и другими коллекциями.
- p
предикат, используемый для проверки элементов.
- returns
объект класса
WithFilter, который поддерживаетmap,flatMap,foreach, иwithFilterоперации. Все эти операции применяются к тем элементам этой Try, которые удовлетворяют предикатуp.
- Annotations
- @inline()
© 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/Try.html
Тип
Tryпредставляет вычисление, которое может завершиться исключением или возвратить успешно вычисленное значение. Он похож на тип scala.util.Either, но отличается по смыслу.Экземпляры
Try[T], являются либо экземпляром scala.util.Success[T], либо scala.util.Failure[T].Например,
Tryможно использовать для выполнения деления на пользовательский ввод без явного обработки исключений в каждом месте, где может произойти исключение.Пример:
import scala.io.StdIn import scala.util.{Try, Success, Failure} def divide: Try[Int] = { val dividend = Try(StdIn.readLine("Enter an Int that you'd like to divide:\n").toInt) val divisor = Try(StdIn.readLine("Enter an Int that you'd like to divide by:\n").toInt) val problem = dividend.flatMap(x => divisor.map(y => x/y)) problem match { case Success(v) => println("Result of " + dividend.get + "/"+ divisor.get +" is: " + v) Success(v) case Failure(e) => println("You must've divided by zero or entered something that's not an Int. Try again!") println("Info from the exception: " + e.getMessage) divide } }Важным свойством
Try, показанным в приведённом примере, является его способность к цеплению или объединению операций, перехватывая исключения по пути. КомбинаторыflatMapиmapв приведённом примере по существу передают либо успешно завершённое значение, упакованное в типSuccessдля дальнейшей обработки последующим комбинатором в цепочке, либо исключение, упакованное в типFailureобычно для простого его передачи дальше по цепочке. Комбинаторы, такие какrecoverиrecoverWith, предназначены для обеспечения некоторого типа поведения по умолчанию в случае ошибки.Примечание: только некритические исключения перехватываются комбинаторами на
Try(см. scala.util.control.NonFatal). Серьёзные системные ошибки, с другой стороны, будут выброшены.Примечание: все комбинаторы Try перехватывают исключения и возвращают ошибку, если не указано иное в документации.
Tryпоявился в стандартной библиотеке Scala после многолетнего использования в качестве неотъемлемой части стека Twitter.2.10