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

问题描述 投票:0回答:5

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

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 exception
5个回答
3
投票

这应该回答你的问题:SO:如何获取变量的名称

这在 Java 中是不可能的。

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


2
投票

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

请参阅 http://docs.google.com/Doc?id=ddhp95vd_6hg3qhc 了解其中一项提案的概述,您可以在其中使用

#field
语法执行您想要的操作。


2
投票

编译代码时变量名称会丢失,因此除非反射提供对它们的访问(即使如此)我很确定这是不可能的。对不起。


2
投票

Java 确实没有办法做到这一点,但您可以从 IDE 中获得一些帮助(如果您正在使用 IDE)。在 Eclipse 中,您可以创建一个这样的模板,这可能会有所帮助:

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

0
投票

你可以做类似的事情(我可能误解你想要做什么)

var.getClass().getName()

其中 Var 是作为对象传递到方法中的对象。

© www.soinside.com 2019 - 2024. All rights reserved.