在Groovy中尝试<string>意味着什么

时间:2016-04-25 20:18:44

标签: intellij-idea groovy

我对代码实现了codenarc静态代码分析,并且遇到了方法的Try<String>返回类型。我有以下问题。

  1. Try<String>是什么意思?
  2. 当我甚至用@TypeChecked注释类时,它仍然无法在String和Try之间进行区分。因为数据类型是相同的(字符串),Ide是否认为它们是相同的?或者Groovy中是否有内部机制将其转换为.toString,以使返回类型看起来相同。
  3. 这两个不一样,因为它失败并出现以下错误: -

    "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]
    

1 个答案:

答案 0 :(得分:3)

Try<T>是一个Scala API,可以被有可能抛出异常的代码使用,每次都返回一个对象;一个Try<T>个实例。此Try<T>实例包含:

  1. 在计算成功的情况下包含结果的值。
  2. 例外情况,如果结果不成功。
  3. 以下是一个简短的例子:

    @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}'