Почему форматирование строки вызывает исключение приведения?

#clojure

#clojure

Вопрос:

Почему это (String/format "%8s" (Integer/toBinaryString 6)) приводит к java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object исключению приведения?

Ответ №1:

Я не знаю Clojure, но я подозреваю, что он пытается вызвать метод, как если бы это была Java:

 String.format("%8s", Integer.toBinaryString(6));
  

но без поддержки varargs. Я подозреваю, что вы хотите:

 (String/format "%8s" (into-array Object (Integer/toBinaryString 6)))
  

Смотрите эту ветку списка рассылки для получения дополнительной информации от людей, которые действительно знают Clojure 🙂

Комментарии:

1. Да, это именно проблема. Лучшим решением, чем использование String/format и into-array , является просто использование функции Clojure format , которая принимает переменные в стиле Clojure и в остальном ведет себя так же, как String/format .

2. @amalloy: Действительно, как отмечено в теме списка рассылки. Я не хотел слишком сильно отклоняться от того, что, как я думал, мне сойдет с рук с точки зрения правильного кода 🙂