【问题标题】:SLF4J varargs interprets first string as markerSLF4J varargs 将第一个字符串解释为标记
【发布时间】:2016-02-01 18:39:38
【问题描述】:

使用时

log.trace("with name {}, duration {}, repetitions {}", name, duration, repetitions);

SLF4J 抱怨如下

[javac] sourcefile.java:105:错误:不兼容的类型:字符串无法转换为标记
[javac] log.trace("名称{},持续时间{},重复次数{}",
[javac] ^
[javac] 注意:一些消息已被简化;使用 -Xdiags:verbose 重新编译以获得完整输出
[javac] 1 个错误

使用

log.trace("with name {}, duration {}, repetitions {}",
      new Object[]{name, duration, repetitions});

解决了问题,但看起来很笨拙。 (特别是因为 API 允许可变参数)。

this answer 似乎是说升级到 SLF4J 1.7 可以解决问题,但 android-slf4j is at 1.6.1

有没有办法在 SLF4J for Android 中使用可变参数构造函数?有其他选择吗?

【问题讨论】:

    标签: java android logging slf4j


    【解决方案1】:

    似乎是 API 中的一个错误。

    使用可变参数,但对于标记方法,也有定义的具有 1、2 和 3 个参数的方法。

    log.trace(Marker, Object...)
    log.trace(Marker, Object)
    log.trace(Marker, Object, Object)
    log.trace(Marker, **Object**, Object, Object)
    

    然而字符串 API,只有 varargs 和 1 和 2 arg 方法。

    log.trace(String, Object...)
    log.trace(String, Object)
    log.trace(String, Object, Object)
    

    对我来说,可变参数可以使用 1、2 或 4 个参数。

    这只是 3 个参数的问题。

    它在 1.7 中通过将突出显示的对象更改为字符串来修复。

    【讨论】:

      【解决方案2】:

      尝试使用以下示例代码解决您的问题:

      log.trace("with name {0}, duration {1}, repetitions {2}", name, duration, repetitions);
      

      【讨论】:

        猜你喜欢
        • 2020-05-31
        • 2019-05-18
        • 2014-10-14
        • 2020-10-22
        • 2020-12-15
        • 2013-05-26
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        相关资源
        最近更新 更多