2015-11-01 12 views
7

WennSLF4J varargs interpretiert erste Zeichenfolge als Marker

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

SLF4J mit beklagt als

[javac] sourcefile.java:105: error: incompatible types: String cannot be converted to Marker
[javac] log.trace("with name {}, duration {}, repetitions {}",
[javac] ^
[javac] Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
[javac] 1 error

folgt

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

das Problem löst verwenden, noch kludgey scheint. (Zumal die API Varargs erlaubt).

Going by this answer scheint zu sagen, dass ein Upgrade auf SLF4J 1.7 würde das Problem lösen, noch die android-slf4j is at 1.6.1.

Gibt es eine Möglichkeit, den varargs-Konstruktor in SLF4J für Android zu verwenden? Gibt es eine Alternative?

Antwort

1

Versuchen Sie Ihr Problem mit folgendem Beispielcode zu lösen:

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

Es scheint ein Fehler in der API.

Varargs werden verwendet, aber für die Marker-Methoden gibt es auch Methoden mit 1, 2 und 3 Argumenten.

Allerdings haben die String-APIs nur varargs und 1 und 2 arg-Methoden.

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

Für mich arbeiten Varargs mit 1, 2 oder 4, Argumente.

Es ist nur ein Problem mit 3 Argumente.

Es ist in 1,7 behoben, indem das markierte Objekt in einen String geändert wird.

Verwandte Themen