web-dev-qa-db-ja.com

Kotlinで推定されたタイプを知るにはどうすればよいですか?

(私はKotlin 1.1.2-2を使用しています)

たとえば、推定された式のタイプif (boolean_value) 1 else 2.0を知るにはどうすればよいですか? kotlinc-jvmはタイプを表示しません。 javaClassも、式ではなく計算値のタイプを示しているため、役に立ちません。

>>> (if (true) 1 else 2.0).javaClass.name
Java.lang.Integer
>>> (if (false) 1 else 2.0).javaClass.name
Java.lang.Double
>>> val v: Double = if (false) 1 else 2.0
error: the integer literal does not conform to the expected type Double
val v: Double = if (false) 1 else 2.0
                       ^
11
letrec

diff型の結果を持つif式を暗黙のプリミティブ変数(型定義のない変数)に割り当てると、変数の型はAny/T?、または暗黙の変数彼らの直接の夕食クラスP。例えば:

// case 1
val v = if (false) 1 else 2.0
//  ^--- Any
v.toInt(); // error because v is Any

// case 2
val v = if (false) 1 else null
//  ^--- Int?

// case 3
val e = if (true) Java.sql.Time(1) else Java.sql.Timestamp(1);
//  ^--- its type is Java.util.Date     

ただし、スーパークラスを使用して変数を明示的に定義できます。次に例を示します。

// case 1
val v:Number = if (false) 1 else 2.0;
v.toInt();//ok 

// case 2
val v:Int? = if (false) 1 else null;

CTRL+SHIFT+P/CTRL+Qを使用して、IDEAで変数タイプをすばやく確認することもできます。

4
holi-java