2016-04-25 82 views
-1

Iam對代碼執行codenarc靜態代碼分析,並遇到了Try<String>方法的返回類型。我有以下問題。什麼是Try <String>在Groovy中的含義

  1. 是什麼Try<String>意思?
  2. 當我甚至用@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

您能告訴我們什麼方法,在哪個類上,返回'Try '? – GreenGiant

+0

你能告訴我們你的代碼是否產生上述異常? – GreenGiant

+0

在我看來,@Emmanuel已經回答了你的問題,如果這也是你的理解,你能否接受答案? – loteq

回答

2

Try<T>是Scala的API,它可以由具有潛在的代碼中拋出異常,返回每次都有一個對象;一個Try<T>實例。這個Try<T>實例包括:

  1. 包含結果的值,在計算成功的情況下。
  2. 例外,如果結果不成功。

下面是一個簡單的例子:

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

Try<String>String不一樣。然而,Try.Success<T>執行toString()以產生您在日誌中看到的輸出的方式:'Success{value=merchant}'

+0

如果結果是成功,try.get()將返回嵌入的響應,否則拋出異常。要獲得字符串,只要確保你在成功的情況下,並獲得()的價值。 https://github.com/lambdista/try/blob/master/src/main/java/com/lambdista/util/Try.java – loteq

+1

當然,這裏可能還有另一個'Try '類,這個不是必需的斯卡拉一個... –

+0

是真的。我所描述的是根據問題描述找到的最接近的匹配。它甚至不是來自Scala的,而是Java 8的重新實現。 –

相關問題