Я часто нахожу меня написанием кода как это:
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));
Нет, Java не может этого сделать, пока не начнет поддерживать замыкания, которые делают поля (и методы) первоклассными гражданами языка программирования.
См. http://docs.google.com/Doc?id=ddhp95vd_6hg3qhc для обзора одного из предложений, в котором вы можете делать все, что хотите, используя #field
] синтаксис.
Имена переменных теряются при компиляции кода, поэтому, если Reflection не предоставляет доступ к ним (и даже тогда), я уверен, что это невозможно. Извините.
В Java действительно нет способа сделать это, но вы можете получить некоторую помощь в своей среде IDE (если вы ее используете). В Eclipse вы можете создать такой шаблон, который может помочь:
throwExceptionWhenEmpty(${varname}, "${varname}");
${cursor}
Вы можете сделать что-нибудь вроде (я могу неправильно понять, что вы хотите сделать)
var.getClass (). GetName ()
Где Var - это ваш объект, переданный в метод как объект.
Это должно ответить на ваш вопрос: SO: Как получить имя переменной.
Это не возможно (легко) в Java.
Вы можете использовать препроцессор и интегрировать его в процесс сборки. Это, вероятно, было бы очень просто и переносимо. Но, как сказал Стивен Си в разделе комментариев, это действительно не путь Java и поэтому не рекомендуется.