【问题标题】:How do I avoid overwriting member variables initialized in a superclass in Scala with an underscore?如何避免用下划线覆盖在 Scala 的超类中初始化的成员变量?
【发布时间】:2013-11-12 22:36:02
【问题描述】:

我的超类通过基于注解的注入通过反射来初始化成员变量。如何防止子类覆盖超类设置的成员变量的值?问题是超类的主构造函数初始化子类的成员变量,然后子类的主构造函数(随后调用)在执行成员变量的声明时覆盖该值。

【问题讨论】:

  • 仅供参考,这是在 Scala 中使用 args4j 时出现的。我正在创建自己的 Options 类,其成员变量用 @Option 注释。然后,我让该类的主构造函数获取一个 args 字符串数组,并使用 args4j CmdLineParser 初始化成员变量。然后,我尝试对我的 Options 类进行子类化,但在我的子类中用 @Option 注释的成员变量没有正确初始化,直到我用下划线初始化它们。

标签: scala inheritance reflection


【解决方案1】:

我发现的答案是用下划线初始化子类的成员变量。这实际上在 4.2 节的语言规范中得到了很好的解释,其中讨论了用下划线初始化变量的 getter 函数,该函数返回其当前值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2013-01-07
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多