[英]How to store static data about a class to
想象一下,我有一个像这样的抽象 class :
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。 这听起来像是 static 数据:它不取决于当前实例,而是取决于设备的类型。
目前,我正在创建 class 的实例以获取其值,因为 #isBuildable() 不是 static。 但我认为这是糟糕的代码设计。
所以,我在这里想要实现的就像创建abstract static
方法。 我见过这个问题没有太大帮助。 我将强制在 Device 的所有子类中实现#isBuildable(这次是静态的),以便我可以调用Floor.isBuildable()
或其他类似的东西。
在这里我不能控制所有的源,所以我不能使用反射率。 希望你能理解这个奇怪的问题!
如果您需要存储特定于类(而不是特定于实例)的信息,自定义注释可能是 go 的方式。
这需要一个 function 使用反射来访问该信息,这在一个小项目中可能是多余的,但在更大的框架或类似项目中应该没有问题。
在 Java 中,static 方法不能覆盖其他 static 方法,所以你想做的事情是不可能的。
由于 Java 没有真正的类型变量(用于 generics 的类型变量在运行时才存在),您无论如何都需要一个实例来确定调用哪个覆盖的 ZA81259CEF8E959C624DF1D456E5D327 方法。 假设您有一个 class Device
,它有两个子类Floor
和Ceiling
,它们都有一个名为foo()
的方法。 由于没有运行时类型变量, T.foo()
无法工作,并且Device.foo()
、 Floor.foo()
和Ceiling.foo()
都指定了要调用的方法。
有一些解决方案/解决方法:
通过反射调用正确的方法。 您将丢失任何 static 类型检查。
引入一个伴随枚举或 class ,其中包含有关您的类型的信息。 例如:
public class DeviceType { private final boolean buildable; private DeviceType(boolean buildable) { this.buildable = buildable; } public boolean isBuildable() { return buildable; } } public class Floor extends Device { public static final DeviceType DEVICE_TYPE = new DeviceType(false); ... }
现在您可以传递Floor.DEVICE_TYPE
作为 class 的一种表示,其中包含您想要的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.