2015-11-01 12 views
7

Quando si utilizzaSLF4J varargs interpreta prima stringa come marker

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

SLF4J lamenta come segue

[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

Utilizzando

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

risolve il problema, ma sembra kludgey. (Soprattutto perché l'API consente vararg).

Passare al numero this answer sembra dire che l'aggiornamento a SLF4J 1.7 risolverebbe il problema, eppure lo android-slf4j is at 1.6.1.

C'è un modo per utilizzare il costruttore varargs in SLF4J per Android? C'è un'alternativa?

risposta

1

provare a risolvere il problema con il seguente codice di esempio:

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

sembra un bug nel API.

I vararg sono utilizzati, ma per i metodi Marker esistono anche metodi definiti con argomenti 1, 2 e 3.

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

Tuttavia, le API String hanno solo vararg e metodi 1 e 2 arg.

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

Per me i varargs funzionano con 1, 2 o 4, argomenti.

È solo un problema con 3 argomenti.

È stato corretto in 1.7 cambiando l'oggetto evidenziato in una stringa.