显然我需要初始化我的记录器:
val LOGGER : Logger = LoggerFactory.getLogger(Foo::class.java);
如果我这样做:
val LOGGER : Logger = LoggerFactory.getLogger(Foo::javaClass);
它提示参数类型与getLogger
不兼容.但是根据 API,两者都是 Class<Foo>
.它们有何不同?
最佳答案
javaClass
是一个扩展属性,它返回实例化 object 的 runtime Java 类。在您的情况下,它被用作属性引用,这将为您提供 KProperty1<Foo, Class<Foo>>
表示扩展函数本身:
val T.javaClass: java.lang.Class<T>
您可以将它与接收器结合使用,例如如果 Foo
提供了一个默认构造函数,你可以说:
Foo::javaClass.get(Foo())
可以简化为:
Foo().javaClass
使用 ::class.java
另一方面,为您提供 Java Class<?>
如 "class references" 中所述直接地。一个简单示例中的所有三种可能性:
val kProperty1: KProperty1<Foo, Class<Foo>> = Foo::javaClass
kProperty1.get(Foo()) //class de.swirtz.kotlin.misc.Foo
Foo::class.java //class de.swirtz.kotlin.misc.Foo
Foo().javaClass //class de.swirtz.kotlin.misc.Foo
关于kotlin - Foo::class.java 和 Foo::javaClass 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46627421/