我对代码实现了codenarc静态代码分析,并且遇到了方法的Try<String>
返回类型。我有以下问题。
Try<String>
是什么意思?@TypeChecked
注释类时,它仍然无法在String和Try之间进行区分。因为数据类型是相同的(字符串),Ide是否认为它们是相同的?或者Groovy中是否有内部机制将其转换为.toString
,以使返回类型看起来相同。 这两个不一样,因为它失败并出现以下错误: -
"ERROR","level_value":40000,"stack_trace":"org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Success{value=merchant}' with class 'java.lang.String' to class 'org.typesafely.util.Try'\n\tat flasher.<Classname>.<MethodName>(<ClassName>.groovy:158) ~[classes/:na]
答案 0 :(得分:3)
Try<T>
是一个Scala API,可以被有可能抛出异常的代码使用,每次都返回一个对象;一个Try<T>
个实例。此Try<T>
实例包含:
以下是一个简短的例子:
@Grab('com.lambdista:try:0.3.1')
import com.lambdista.util.Try
import com.lambdista.util.FailableSupplier
Try<BigDecimal> divideBy(BigDecimal dividend, BigDecimal denominator) {
Try.apply({ dividend / denominator } as FailableSupplier)
}
def a = divideBy(4, 2)
assert a.success
assert a.value == 2
def b = divideBy(4, 0)
assert b.failure
assert b.failed().toString() == 'Success{value=java.lang.ArithmeticException: Division by zero}'
上面的示例演示了当使用ArithmeticException
异常执行时,可能抛出异常的代码(例如Try.apply()
)会被捕获并包装在Try.Failure<T>
的实例中。 / p>
Try<String>
与String
不同。但是,Try.Success<T>
以产生您在日志中看到的输出的方式实现toString()
:'Success{value=merchant}'