【问题标题】:Modifying return value of getters of String fields修改 String 字段的 getter 的返回值
【发布时间】:2012-03-02 11:21:50
【问题描述】:

假设我的应用程序中有类似于域类的类,其中包含一些 Long、Double、Date 和 String 字段。这些类扩展了基类,具有一些通用字段和一些通用方法。每当我访问 String 的类字段(虽然是 getter)时,我都想对返回的值进行一些更改(例如删除 html 标签)。有没有比为 String 类型的每个字段实现 getter 更好的方法?继承的字段呢?

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    不要更改 Grails 为您创建的默认 getter/setter 实现。您肯定会在各个地方弄乱您的应用程序。 Grails 使用约定优于配置,因此 getter/setter 绝对应该保持不变。

    创建您自己的方法来返回您想要的内容:为字段标题创建方法 getStrippedTitle()。您也可以将此方法添加到瞬态。

    【讨论】:

    • 感谢您的回答。它与 Burt Beckwith 提供的一个非常相似,所以我在那里的评论也适用于此。
    【解决方案2】:

    如果您更改设置的值,或返回与设置不同的值,您会混淆 Hibernate。这是因为当你从数据库中加载一个实例时,Hibernate 将原始数据保存在它的一级缓存中,并返回一个域对象实例给你。当你刷新时,它会将当前状态与原始状态进行比较,如果它发生了变化,它会将更改推送到数据库中。因此,如果您返回的值与设置的值不同,但并未真正更改该值,Hibernate 将无法区分。

    您最好不理会属性并创建返回更改数据的方法。我使用的一种约定是,例如,如果您有一个 String body 字段,则可以通过属性名称 body 或 getter getBody() 访问它,但您可以创建 Hibernate 不知道的 body() 方法并返回你想要的任何东西。

    【讨论】:

    • 我同意你的警告。但我不是在这里谈论映射到数据库的实际域类。我使用的可能可以命名为传输对象(非常具体的情况是使用 SomeJson 类来形成 jsons 到客户端并从客户端获取数据)。我试图避免在每个此类中的每个字段的函数方法中实现 getter 或类似方法。尝试了一些元编程的东西但没有成功,因为它对我来说很新......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2020-05-07
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多