【问题标题】:Access object properties in groovy using []使用 [] 在 groovy 中访问对象属性
【发布时间】:2010-11-02 11:28:58
【问题描述】:

假设我在 groovy 中有以下代码:

class Human {
  Face face
}
class Face {
  int eyes = 2
}
def human = new Human(face:new Face())

我想使用[] 访问eyes 属性:

def humanProperty = 'face.eyes'
def value = human[humanProperty]

但这并不像我预期的那样工作(因为它试图访问 Human 对象上名为“face.eyes”的属性,而不是 human.face 属性上的 eye 属性)。

还有其他方法吗?

【问题讨论】:

    标签: groovy


    【解决方案1】:

    您需要评估字符串以获取所需的属性。为此,您可以这样做:

    humanProperty.split( /\./ ).inject( human ) { obj, prop -> obj?."$prop" }
    

    (将humanProperty 拆分为属性名称列表,然后从human 对象开始,依次调用每个属性,将结果传递给下一次迭代。

    或者,您可以使用 Eval 类执行以下操作:

    Eval.x( human, "x.${humanProperty}" )
    

    要使用[] 表示法,您需要这样做:

    human[ 'face' ][ 'eyes' ]
    

    【讨论】:

      【解决方案2】:

      更简单的方法是简单地执行:

      def value = human['face']['eyes']
      

      但如果您不知道所需的值(“脸”和“眼睛”),还有一种更简单、更清晰的方法。

      def str = "face.eyes"
      def values = str.split("\\.")
      def value = human[values[0]][values[1]]
      

      【讨论】:

        猜你喜欢
        • 2015-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        • 2015-07-15
        相关资源
        最近更新 更多