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
^
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で変数タイプをすばやく確認することもできます。