У компилятора есть доступ к строке формата И требуемым типам и параметрам. Поэтому я предполагаю, что какой-то способ указать отсутствующие параметры для varargs ... даже если бы это было только для подмножества случаев. Есть ли какое-то время для затмения или другого идеала, указывающего на то, что переданные varargs могут вызвать проблему во время выполнения?Как получить string.format, чтобы жаловаться во время компиляции
ответ
Похоже, что FindBugs может решить вашу проблему. Существуют некоторые категории предупреждений, относящиеся к строкам формата.
Компилятор Java не имеет встроенных семантических знаний о параметрах StringFormat, поэтому он не может проверить их во время компиляции. Для всего, что он знает, StringFormat - это еще один класс, а String.format - это еще один метод, и данная строка формата - это еще одна строка, как и любая другая.
Но, я чувствую вашу боль, столкнувшись с этими же проблемами за последние пару дней. То, что они должны были сделать, это сделать «менее осторожным» относительно количества параметров и просто оставить неизменяемые маркеры% s.
возможно, компилятор не может сказать ... правда, но, может быть, есть некоторые инструменты статического анализа, которые делают это? – mafalda
Хорошая идея для улучшения затмение, кстати. Он мог бы проверять хотя бы для строк статического формата и varargs с фиксированным размером. –
Посмотрите мой ответ здесь - http://stackoverflow.com/questions/24769455/java-string-format-compile-time-error-checking-and-safer-alternative - все еще небольшая работа в процессе –