Практическое руководство заставляет компилятор Java вставлять имя переменной в строку

Я часто нахожу меня написанием кода как это:

throwExceptionWhenEmpty(fileType, "fileType");
throwExceptionWhenEmpty(channel, "channel");
throwExceptionWhenEmpty(url, "url");

throwExceptionWhenEmpty метод делает что-то вроде этого:

private void throwExceptionWhenEmpty(final String var, final String varName) {
    if (var == null || var.isEmpty()) {
        throw new RuntimeException("Parameter " + varName + " may not be null or empty.");
    }
}

Я хотел бы избежать этого очевидного дублирования, передающего имя переменной как строка. Существует ли способ, которым компилятор Java может вставить имя переменной в строке для меня?

Я был бы счастлив, если я мог бы записать что-то вроде этого:

throwExceptionWhenEmpty(fileType, nameOf(fileType));
5
задан Eduard Wirch 3 March 2010 в 13:24
поделиться

5 ответов

Нет, Java не может этого сделать, пока не начнет поддерживать замыкания, которые делают поля (и методы) первоклассными гражданами языка программирования.

См. http://docs.google.com/Doc?id=ddhp95vd_6hg3qhc для обзора одного из предложений, в котором вы можете делать все, что хотите, используя #field ] синтаксис.

2
ответ дан 14 December 2019 в 01:06
поделиться

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

2
ответ дан 14 December 2019 в 01:06
поделиться

В Java действительно нет способа сделать это, но вы можете получить некоторую помощь в своей среде IDE (если вы ее используете). В Eclipse вы можете создать такой шаблон, который может помочь:

throwExceptionWhenEmpty(${varname}, "${varname}");
${cursor}
2
ответ дан 14 December 2019 в 01:06
поделиться

Вы можете сделать что-нибудь вроде (я могу неправильно понять, что вы хотите сделать)

var.getClass (). GetName ()

Где Var - это ваш объект, переданный в метод как объект.

0
ответ дан 14 December 2019 в 01:06
поделиться

Это должно ответить на ваш вопрос: SO: Как получить имя переменной.

Это не возможно (легко) в Java.

Вы можете использовать препроцессор и интегрировать его в процесс сборки. Это, вероятно, было бы очень просто и переносимо. Но, как сказал Стивен Си в разделе комментариев, это действительно не путь Java и поэтому не рекомендуется.

3
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: