Проблема может быть найдена в следующем коде:
def debug[T](format: String, arg1:T, arg2:Any, args:Any*):T = {
logger.debug(format, (arg1 :: arg2 :: args.toList).toArray)
arg1
}
Поскольку то, что я передаю в качестве второго параметра, является массивом Any, этот код должен был вызвать метод отладки SLF4J
public void debug(String format, Object[] argArray);
Но
public void debug(String format, Object arg);
заканчивает тем, что вызывается вместо.
Позвольте привести пример.
Когда я звоню
debug("The four parameters are {} as String, {} as Integer, {} as String and {} as Integer.", "1", 2, "3", 4)
Журналы
DEBUG - The four parameters are [1, 2, 3, 4] as String, {} as Integer, {} as String and {} as Integer.
вместо
DEBUG - The four parameters are 1 as String, 2 as Integer, 3 as String and 4 as Integer.
ПРИМЕЧАНИЕ 1. Я предполагал, что первый вызов будет работать на основе scala.Array Scaladoc .
Представляет полиморфные массивы. Массив [T] - это представление Scala для T [] в Java.
ПРИМЕЧАНИЕ 2. Код, с которого возник мой вопрос, можно найти по адресу https://github.com/alexmsmartins/UsefullScalaStuff/blob/master/src/main/scala/alexmsmartins/log/LoggerWrapper.scala
.
Это небольшая оболочка вокруг slf4j, которую я использую в своих проектах Scala.