ダブルコロン(::
)がKotlinの関数(呼び出し可能)参照を取得するために使用されることを知っています。 String::compareTo
、"string"::compareTo
。
JavaではSomeClass.class
およびsomeInstance.getClass()
を使用してクラスを取得します。Kotlinではclass
が関数/メソッドではないのにSomeClass::class
およびsomeInstance::class
を使用する理由は何ですか?
println(String::compareTo)
// output: fun kotlin.String.compareTo(kotlin.String): kotlin.Int
println("string".compareTo("strong"))
// output: -6
println(String::class)
// output: class kotlin.String
println("string".class)
// compile error
Kotlinの::
は、メソッド参照、プロパティ参照、クラスリテラルを含むメタプログラミングに関するものです。 クラスリテラルについての議論 を参照してください。
Kotlinでは _Object::class
_ と書くことができます。これにより KClass
が得られます。 KClassは、Javaから知っているクラスClassと同等ではありません。 Java Classクラスを取得したい場合は、_Object::class.Java
_を書くことができます-すなわち:println("string"::class.Java)
また、Javaでは、_.class
_はメソッドでもメンバーでもありません。コンパイラーがクラスにアクセスするための特別なディレクティブです。各言語が最も意味のある構文を選択し、kotlinの作成者は_::
_を使用することに決めたと思います