开发者社区> 问答> 正文

Groovy类使用另一个实例字段

我试图建立一个具有属性的Groovy类,并使一个属性相互依赖。但我似乎总是得到一个null或默认值。我尝试使用'this'关键字,但缺少基本内容。我知道它可能与实例变量有关。

说我有以下几点:

class BaseClass {
    String jobName
    String jobDescription = jobName + '-description'
}

如果我实例化该类并声明两个属性,则一切正常:

new BaseClass().with {
        jobName = 'test-job'
        jobDescription = 'Sample description'
    }
    ```
但是,如果仅实例化jobName属性,则说明将使用null。因此它将是“空描述”。

有什么方法可以实例化对象并使用jobName属性,这样我就不必为创建的每个对象重复自己的工作?
问题来源:Stack Overflow

展开
收起
montos 2020-03-22 16:34:01 629 0
1 条回答
写回答
取消 提交回答
  • 我认为最好是覆盖设置器jobName,然后防御地设置描述。例如

    class BaseClass {
    
        String jobName
    
        String jobDescription
    
        void setJobName(String jobName) {
            this.jobName = jobName
            if (!jobDescription) {
                jobDescription = "${jobName}-description"
            }
        }
    }
    
    assert new BaseClass().tap{ jobName = 'test-job' }.jobDescription == 'test-job-description'
    

    您的尝试无法按预期进行的原因是由于事态发生-属性默认值是在对象的构造时完成的。因此,稍后设置作业(在中with)无效(不会从新输入中再次计算出该作业)。

    另一个选择是基于构造函数的方法(例如,使用final并在c'tor中处理此问题以创建默认描述)

    回答来源:Stack Overflow

    2020-03-22 16:34:50
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
继承与功能组合 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载