如何在 Groovy 类中“隐藏”元类属性

Posted

技术标签:

【中文标题】如何在 Groovy 类中“隐藏”元类属性【英文标题】:How to 'hide' metaClass property in a Groovy class 【发布时间】:2010-10-23 23:12:39 【问题描述】:

我正在创建一些简单的 groovy 类,例如

class Person 
    int age
    String name

在依赖反射提取对象属性的 Java 方法中使用,例如年龄和姓名。问题是 metaClass 也显示为属性。更新 Java 方法以忽略此属性不是一种选择。我尝试将 metaClass 属性设置为 null ,但这不起作用。

【问题讨论】:

编译器会在其他上下文中添加其他成员(如内部类中的内部外部引用)。也许您可以更新反射代码以仅反映包/受保护/公共属性? 你找到隐藏元类的方法了吗? 不,我刚刚解决了它。 不要在 groovy 中创建它们,好像它们只是 POJO 的。 【参考方案1】:

MetaClass 在创建期间为 Groovy 类注入。恕我直言,我认为您不能将其设置为 Null。您调用的 setMetaClass 方法仅将您在类上设置的任何自定义元类设置为 Null,而不是在构造期间注入的元类。

【讨论】:

【参考方案2】:

如果您使用 Java 和 Groovy 中的这些类,为什么不直接在 Java 中创建 POJO,而不是在 Groovy 中。 我知道这不能回答您的问题,但很高兴知道为什么决定将 Groovy 用于 POJO

【讨论】:

以上是关于如何在 Groovy 类中“隐藏”元类属性的主要内容,如果未能解决你的问题,请参考以下文章

Python元类编程

我如何在 src/groovy/ 类中使用“日志”

反射元类 练习

元类中的属性()设置器问题

如何在我的元类中获取类的父类?

如何在 python 中使用元类来增加或覆盖添加到类中的方法