我经常发现自己写这样的代码:
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));
这应该回答你的问题:SO:如何获取变量的名称。
这在 Java 中是不可能的。
您可以使用预处理器并将其集成到您的构建过程中。这可能非常简单且便携。但正如 Stephen C 在评论部分所说,这确实不是 Java 方式,因此不推荐。
不,Java 不能做到这一点,直到它开始支持闭包,使字段(和方法)成为编程语言的一等公民。
请参阅 http://docs.google.com/Doc?id=ddhp95vd_6hg3qhc 了解其中一项提案的概述,您可以在其中使用
#field
语法执行您想要的操作。
编译代码时变量名称会丢失,因此除非反射提供对它们的访问(即使如此)我很确定这是不可能的。对不起。
Java 确实没有办法做到这一点,但您可以从 IDE 中获得一些帮助(如果您正在使用 IDE)。在 Eclipse 中,您可以创建一个这样的模板,这可能会有所帮助:
throwExceptionWhenEmpty(${varname}, "${varname}");
${cursor}
你可以做类似的事情(我可能误解你想要做什么)
var.getClass().getName()
其中 Var 是作为对象传递到方法中的对象。