2016-04-25 5 views
-1

Iamはcodeenarcの静的コード解析をコードに実装し、メソッドの戻り型はTry<String>でした。私は以下の質問があります。Groovyで試した<String>の意味

  1. Try<String>とは何ですか?
  2. 私はさらに@TypeCheckedでクラスに注釈を付けると、それでもStringとTryを区別することはできません。データ型が同じ(文字列)なので、熟練者は同じことを考慮していますか? Groovyに内部機構があり、戻り型が同じに見えるように.toStringに変換します。

それが次のエラーで失敗したため、これらの2つが同じではありません: -

"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

あなたは、 '' を試してみて返すどのクラスにどのような方法、教えてください。 – GreenGiant

+0

上記の例外を生成しているコードを教えてください。 – GreenGiant

+0

私の意見では、@エムマヌエルはあなたの質問に答えてくれました。もしそれがあなたの理解であれば、答えを受け入れてください。 – loteq

答えて

2

Try<T>は返すために、例外をスローする可能性を秘めているコードから使用することができScalaのAPIであります毎回オブジェクト。 Try<T>インスタンス。このTry<T>インスタンスは、次のいずれかをラップします。

  1. 成功した計算の場合は、結果を含む値。
  2. 失敗した場合の例外。

ここでは簡単な例です:Try.apply()で実行例外が代わりのインスタンスでキャッチし、ラップされたときに上記の例では、このようArithmeticExceptionとして、例外をスローする可能性そのコードを示してい

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

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の再実装です。 –

関連する問題