gpt4 book ai didi

java - 在 Java : storing a field twice, 中哪个更可取,还是将其存储为基类中的保护对象?

转载 作者:行者123 更新时间:2023-11-30 06:36:55 24 4
gpt4 key购买 nike

我很少使用继承,但是当我使用时,有时会遇到以下问题。鉴于:

  • 我想在父类构造函数中注入(inject)一个对象,比如 Logger
  • 给定父类和子类都需要使用这个字段。
  • 鉴于我不想将字段暴露给外界(没有 setter/getter )。

我见过用两种不同的方式解决这个问题:

class ChildClass extends ParentClass {
private Logger logger;
public ChildClass(Logger logger) {
super(logger);
this.logger = logger;
}
}

class ParentClass {
private Logger logger;
public ParentClass(Logger logger) {
this.logger = logger;
}
}

或者:

class ChildClass extends ParentClasss {
public ChildClass(Logger logger) {
super(logger);
}
}

class ParentClass {
protected Logger logger;
public ParentClass(Logger logger) {
this.logger = logger;
}
}

我猜另一种选择是 ParentClass 中的 protected getter,但我从未遇到过这种情况。

就个人而言,我更喜欢第二种方法,理由是较小的数据大小胜过封装,但我经常在野外遇到第一种版本。有没有更可取的方法来做到这一点?

最佳答案

我不认为有一个严格可取的方法,但一般来说,如果您知道子类可能需要记录器 - 正如您在本例中所做的那样 - 那么您应该通过使字段 protected 或通过添加 protected setter/getter 。有些人会说添加 setter/getter 更好。

您看到“在野外”重复字段的一个原因是因为子类是第二个编写的,并且修改父类并不总是可能的。

关于java - 在 Java : storing a field twice, 中哪个更可取,还是将其存储为基类中的保护对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4171242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com