kotlinクラスでは、クラスタイプTのオブジェクトとしてメソッドパラメーターがあります(kotlinのドキュメントはこちらを参照)。オブジェクトとして、メソッドを呼び出すときにさまざまなクラスを渡します。Javaでは、オブジェクトを使用してクラスを比較することができます。instanceof
だから私はそれがどのクラスであるかを実行時にチェックして比較したいですか?
instanceof
kotlinでクラスを確認するにはどうすればよいですか?
回答:
組み合わせwhen
てis
:
when (x) {
is Int -> print(x + 1)
is String -> print(x.length + 1)
is IntArray -> print(x.sum())
}
公式ドキュメントからコピー
is
演算子またはその否定形式を使用して、実行時にオブジェクトが特定の型に準拠しているかどうかを確認できます!is
。
例:
if (obj is String) {
print(obj.length)
}
if (obj !is String) {
print("Not a String")
}
カスタムオブジェクトの場合の別の例:
さて、私はobj
タイプのを持っていCustomObject
ます。
if (obj is CustomObject) {
print("obj is of type CustomObject")
}
if (obj !is CustomObject) {
print("obj is not of type CustomObject")
}
if
、obj
は自動的ににキャストされString
ます。したがって、ブロック内length
に明示的にキャストobj
する必要なしに、直接などのプロパティを使用できますString
。
Kotlinのドキュメントはhttps://kotlinlang.org/docs/reference/typecasts.htmlで読むことができます。is
演算子またはその否定形式を使用して、実行時にオブジェクトが特定の型に準拠しているかどうかを確認できます。!is
たとえば、次を使用しis
ます。
fun <T> getResult(args: T): Int {
if (args is String){ //check if argumen is String
return args.toString().length
}else if (args is Int){ //check if argumen is int
return args.hashCode().times(5)
}
return 0
}
次に、メイン関数で、端末に印刷して表示しようとします。
fun main() {
val stringResult = getResult("Kotlin")
val intResult = getResult(100)
// TODO 2
println(stringResult)
println(intResult)
}
これが出力です
6
500