Нет, компилятор не может воспринимать это как константу времени компиляции (см. Также этот вопрос ).
Чтобы проиллюстрировать: используя манипулирование байт-кодом, можно изменить поведение String.format (), например, что возможно в модульном тестировании с PowerMock и подобными библиотеками. В этом случае String.format("hello %1$s","world")
может вернуть что-то еще, кроме "Привет, мир".
Примечание:
Я предполагаю, что вы имеете в виду как «константное выражение времени компиляции». (В противном случае вы можете просто определить переменную final foo = String.format(...)
, и переменная foo будет константой в следующем коде). Но такие константы не могут, например, использоваться в качестве значений аннотации.