Java:强制字符串名称被接受为类?

时间:2011-10-21 03:16:51

标签: java string variables object printing

我想打印出这样的声明:

Object SomeObject = new Object("object's name");
System.out.println(SomeObject.name);

除了在print语句中指定Object的名称外,指定一个先前已声明为现有对象名称的String。

示例:

Object SomeObject = new Object("object's name");
String object_string = "SomeObject";
System.out.println("object_string.name");

我知道第一个例子会打印出“对象的名字”。我希望第二个做同样的事情,但是使用字符串。请注意,字符串的值与对象名称相同。显然第二个例子不起作用,因为object_string是一个字符串,而不是一个对象。

所以我的问题是,我可以强制print语句接受“object_string”作为对象的名称吗?

System.out.println("(Object)object_string.name");

也许是这样的东西?

由于

2 个答案:

答案 0 :(得分:1)

你正在寻找的是字符串插值(至少它是在Perl中调用的,这是我最熟悉的例子)而Java没有它,抱歉。但是,有一些基于Java构建的工具可以在更专业的用例中提供类似的功能。例如,您可能对JSP ELOGNLSpring EL感兴趣。

但是,请注意,所有这些都需要一些脚手架来设置,特别是,您在这些动态上下文中引用的对象必须首先放入某种地图或其他持有者。没有办法直接从局部变量引用它们。

另一方面,像Groovy这样的其他语言也内置了这个功能。

答案 1 :(得分:0)

您不能从String转到命名变量名,当编译为字节代码时,object_string变量不再存在,并且编译器无法知道“object_string”引用变量object_string。当然,除非你有一个字符串映射到你控制的变量。

最好使用反射来查找属性“名称”并打印它。

public void printProperty(Class<?> cl, String propertyName) {
   //Use reflection here to look up the propertyName on class cl and print
}

printProperty(Object.class, 'name');