2011-10-21 34 views
1

我想打印了一份声明,如下所示:Java:强制字符串名称被接受为一个类?

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

除了不指定在打印语句中的对象的名称,指定将前面已宣布为现有对象的名称的字符串。

例子:

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

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

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

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

也许这样的事情?

感谢

+1

我真的不明白你在问什么。你知道Class.forName()吗? –

+0

Class.forName()究竟是什么? – Blackvein

+0

它允许您根据字符串名称检索类。我不知道它是否会对你有所帮助。 –

回答

1

什么你正在寻找被称为字符串插值(至少这就是它被称为在Perl,这是我最熟悉的例子)和Java没有它,对不起。但是,有一些基于Java的工具可以在更专用的用例中提供类似的功能。例如,您可能对JSP EL,OGNLSpring EL感兴趣。

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

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

0

你不能从字符串去命名变量名,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'); 
相关问题