java使用表达式访问对象的属性值
考虑下面的代码:
Class Demo
{
Person person = new Person("foo"); // assume Person class has a 'name' field.
//Now, how do I get the value of a field, using some expression.
String expression = "person.name";
}
现在,我想计算“expression”以获得“name”属性的值。有人能告诉我怎么做吗
-- 更新:“表达式”字符串我将从XML文件中获取它。那么,在该场景中是否也可以使用“反射”?“expression”字符串也可以深入到更深的层次,比如“person”。生日日期'
# 1 楼答案
Java中没有本机方法来实现这一点。还有多种其他选择
一种方法是使用JXPath。这使用XPath样式的语法来查询对象。对于你来说,这可能有点过分,但毫无疑问是强大的
例如,从JXPath主页:
它向给定的供应商对象询问其地址(给定邮政编码90210)。因此,您可以导航对象层次结构并提供谓词来执行“选择”。。WHERE'类型查询
另见thisjava。net文章提供更多示例(我写的东西的无耻插件)
# 2 楼答案
“正确的”方法是让一个名为getName()的getter方法返回name的值
# 3 楼答案
您可以使用反射,尽管我建议像其他人建议的那样使用工具来解析表达式
但是,如果您的表达式是简单的,您可以这样做:
# 4 楼答案
通常在Java中,您创建getter来检索此信息。但是,如果需要按名称获取字段的值,则应使用reflection
然而,你的问题中有一点让我感到困扰,那就是你的问题更多地与设计有关,而不是与思考有关。你能告诉我们更多吗
# 5 楼答案
尽管可以使用反射来实现这一点(
java.bean
可能更有意义),但使用反射往往表示混淆你为什么要解释一些文本?你是故意写口译员吗?对
person
的引用真的应该被视为一个对象吗?告诉我们你的意图# 6 楼答案
当然,您可以自己编写一个使用反射的解析器来完成这类工作,但是您也可以使用Spring的表达式求值语言,这非常接近您想要的(Documentation!)
你可以用它做一些很酷的事情;它是一种功能强大的语言,类似于JSP的EL脚本(这也是一个选项)。你只需要给它一个上下文,在这个上下文中“person”意味着什么
榜样