kotlin - kotlin中具有扩展功能的伴侣对象?
问题描述
我想拥有扩展功能并使用来自kotlin-logging 的记录器,并在伴随对象中拥有常量。
我的功能:
fun String.toFoo(): Foo {
logger.debug { "Mapping [$this] to Foo" }
if(MY_CONST.equals(this) {
...
}
问题是我应该放在哪里val logger = KotlinLogging.logger {}
,MY_CONST
因为我不能使用带有扩展功能的伴生对象?
解决方案
如果您只想让记录器成为单例,则可以创建一个包含记录器实例的对象并从那里访问它。
Object LoggerSingleton( val logger = KotlinLogging.logger{})
然后在您的扩展功能中
fun String.toFoo(): Foo {
LoggerSingleton.logger.debug { "Mapping [$this] to Foo" }
if(MY_CONST.equals(this) {
}
由于 Kotlin 中的 Object 保证只有一个实例,因此每次使用 toFoo 时不会有不同的记录器。
编辑 保留所需的类名 使用此签名 像这样:
Object StringLoggerSingleton( val logger = KotlinLogging.logger("String"))
推荐阅读
- sql - BigQuery 重复的 rank() 数字
- java - Java - 从文本文件中读取并将项目(字符串,数组列表)添加到哈希图中
- android - kotlin - 以编程方式为视图设置 aplha
- javascript - Javascript API GET 请求失败,代码为 404。服务器响应被截断
- python - 多维度上的 Tensorflow embedding_lookup
- python-3.x - 删除烛台_ohlc 图表中两个日期之间的空格
- html - 垂直下拉菜单未正确显示
- c++11 - C++在基类非静态函数中调用派生类静态函数
- python-3.x - 无法访问 rdkit 中 Chem.Atom 子类中的实例属性
- javascript - 生成包含起始 url + document.title + 另一个字符串的可点击 URI