如何让java编译器将变量名称插入到字符串中

时间:2010-03-03 13:24:53

标签: java compiler-construction

我经常发现自己编写这样的代码:

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 个答案:

答案 0 :(得分:3)

这应该回答你的问题:SO: How to get name of a variable

Java中不可能(轻松)实现。

您可以使用预处理器并将其集成到构建过程中。这可能非常简单和便携。但正如Stephen C在评论部分所说的那样,这不是Java方式,因此不推荐使用。

答案 1 :(得分:2)

编译代码时,变量名称会丢失,除非Reflection提供对它们的访问权限(即便如此),我很确定这是不可能的。遗憾。

答案 2 :(得分:2)

Java实际上没有办法做到这一点,但您可以从IDE获得一些帮助(如果您使用的话)。在Eclipse中,您可以创建一个这样的模板,它可以提供帮助:

throwExceptionWhenEmpty(${varname}, "${varname}");
${cursor}

答案 3 :(得分:2)

不,Java不能这样做,直到它开始支持使字段(和方法)成为编程语言的第一类公民的闭包。

有关其中一个提案的概述,请参阅http://docs.google.com/Doc?id=ddhp95vd_6hg3qhc,您可以使用#field语法在其中执行所需操作。

答案 4 :(得分:0)

你可以做点什么(我可能会误解你想做什么)

var.getClass()。的getName()

Var是你的Object作为Object传递给方法。