San*_*K P 1 java logging static android kotlin
我正在尝试在 android 中创建一个 Logger 类,它仅在调试版本时才会记录消息。
object Logger2 {
private const val TAG = Constants.LOGGING_TAG
fun d(message : Any?){
if (BuildConfig.DEBUG)
Log.d(TAG , message.toString())
}
fun d(message: Any? , e : Exception?){
if (BuildConfig.DEBUG)
Log.d(TAG , message.toString(), e)
}
fun e(message : Any?){
if (BuildConfig.DEBUG)
Log.e(TAG , message.toString())
}
fun e(message: Any? , e : Exception?){
if (BuildConfig.DEBUG)
Log.e(TAG , message.toString(), e)
}
fun w(message : Any?){
if (BuildConfig.DEBUG)
Log.w(TAG , message.toString())
}
fun w(message: Any? , e : Exception?){
if (BuildConfig.DEBUG)
Log.w(TAG , message.toString(), e)
}
fun v(message : Any?){
if (BuildConfig.DEBUG)
Log.v(TAG , message.toString())
}
fun v(message: Any? , e : Exception?){
if (BuildConfig.DEBUG)
Log.v(TAG , message.toString(), e)
}
}
Run Code Online (Sandbox Code Playgroud)
由于我希望所有其他活动和类都能够使用此记录器类,因此我将该类创建为 kotlin 对象。
这在所有其他 kotlin 类中工作得很好,我能够像这样调用日志方法,这就是我从 kotlin 类中调用的方式。
Logger2.e("message")
Run Code Online (Sandbox Code Playgroud)
但是当我尝试从 Java 类进行相同的调用时。我收到这样的错误。
有人能告诉我这个错误到底意味着什么以及如何解决它吗?我调用 Logger2 类的方法甚至不是 static 。那为什么会出现这个错误呢?
Kotlin 对象并不完全等同于 Java static。他们是单身人士。它们作为类实例存在。当从 Java 访问时,必须通过名为 的静态字段检索单例实例INSTANCE:
Logger2.INSTANCE.e("foo");
Run Code Online (Sandbox Code Playgroud)
如果您希望编译器生成这些函数中的每一个,static以便您不必通过单例实例检索它们,则将它们标记为@JvmStatic:
object Logger2 {
@JvmStatic
fun d(message : Any?){
if (BuildConfig.DEBUG)
Log.d(TAG , message.toString())
}
//...
}
Run Code Online (Sandbox Code Playgroud)
有关此内容的文档位于此处。
如果您对这样设计的原因感到好奇:
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |