【发布时间】:2020-07-30 15:16:49
【问题描述】:
想象一下我有一个这样的抽象类:
public abstract class Device {
public Device(DeviceModel model){
// ...
}
public abstract boolean isBuildable();
}
然后我有一个可能看起来像这样的实现:
public final class Floor extends Device {
// ...
@Override
public void boolean isBuildable(){
return false;
}
}
这里,每个 Device 子类都向 #isBuildable() 返回 true 或 false。但是 Floor 的每个实例总是返回 false。 Device 的另一种实现可能会返回 true。这听起来像是一个静态数据:它不依赖于当前实例,而是依赖于设备的类型。
目前,我正在创建一个类的实例来获取它的值,因为 #isBuildable() 不是静态的。但我认为这是糟糕的代码设计。
所以,我在这里想要实现的就像创建 abstract static 方法一样。我见过this question 并没有太大帮助。我会在 Device 的所有子类中强制实现#isBuildable(这次是静态的),这样我就可以调用 Floor.isBuildable() 或其他类似的东西。
这里我不能控制所有的来源,所以我不能在上面使用反射率。 希望你能理解这个奇怪的问题!
【问题讨论】:
-
即使该值不是动态的,也并不意味着它是糟糕的设计。我猜主要你将使用 Device 类,所以遵循 OOP 方式比使其成为静态方式更好。
-
逻辑不正确。结果取决于类型使其成为动态的,而不是静态的。类型在运行时确定。静态意味着它可以在编译时解析。
标签: java abstract-class static-methods