Преобразовать постоянную времени компиляции int в постоянную строку времени компиляции в Java

У меня есть аннотация, для которой требуется строка с константой времени компиляции, и я хотел инициализировать ее с помощью константы времени компиляции int из одной из библиотек, которые я использую. Итак, в итоге я сделал что-то вроде этого:

public class LibraryClass {
    public static int CONSTANT_INT = 0; //Where 0 could be whatever
}

public class MyClass {
    private static final String CONSTANT_STRING = "" + LibraryClass.CONSTANT_INT;

    @AnnotationThatNeedsString(CONSTANT_STRING)
    public void myMethod() {
        //Do something
    }
}

Мой вопрос: есть ли лучший способ преобразования примитивов в строки с постоянным временем компиляции, чем использование "" + PRIMITIVE_TO_CONVERT? Какой-то способ «привести» примитив к String? Потому что делать это таким образом кажется немного странным.


person Parisbre56    schedule 12.10.2016    source источник


Ответы (3)


Я думаю, что ваше текущее решение является лучшим, поскольку вы правильно определили, что для аннотаций нужны значения «константы времени компиляции». "" + INT_VALUE по крайней мере лучше, чем создание избыточности путем повторения значения из библиотеки, но в виде строки ("23"), и это "хорошая" функция языка Java для определения вашего решения как константы времени компиляции.

Если вы можете, вы, конечно, также можете изменить аннотацию, чтобы использовать параметр int в качестве параметра значения, как это предлагается в другом ответе (но я предполагаю, что аннотация также исходит из библиотеки?).

person Florian Albrecht    schedule 12.10.2016

Попробуйте использовать String.valueOf(LibraryClass.CONSTANT_INT);

person Anthony    schedule 12.10.2016
comment
Но это нельзя использовать непосредственно в аннотации, только при инициализации CONSTANT_STRING. - person Florian Albrecht; 12.10.2016
comment
Является частной статической финальной строкой CONSTANT_STRING = String.valueOf(LibraryClass.CONSTANT_INT); непригодный? - person Anthony; 12.10.2016
comment
Да, это сработает, и это правильный ответ. Но я думаю, что создатель вопроса задал что-то вроде @AnnotationThatNeedsString(someCleverCastOf(CONSTANT_INT)). - person Florian Albrecht; 12.10.2016
comment
Нет, я должен исправить себя. Тогда String больше не является константой времени компиляции, поэтому ваше решение не будет работать - тогда вы не сможете использовать константу в аннотации. - person Florian Albrecht; 12.10.2016

я бы предложил

  • заставить @AnnotationThatNeedsString принимать целое число или
  • сделать константу строкой. Вы можете проанализировать его как int во время выполнения.

e.g.

public static int CONSTANT_INT = Integer.parseInt(CONSTANT_STRING);
person Peter Lawrey    schedule 12.10.2016