[英]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.