[英]How do i implement a generic class that calls a static method of specified interface in java
我有以下代碼,它不能按預期工作。 當我使用 Grumbo 作為類型調用 Chumbles 構造函數時,它每次調用 Schlami 接口的靜態方法而不是 Grumbo 的方法。 我在這里想念什么? 什么解決方法,我很確定我需要一個,我應該實施嗎?
提前致謝!
ps:我已經為我的命名約定感到抱歉
編輯:我的意圖:我有幾個類都需要轉換為 JSON 並從 JSON 轉換回一個類。 除此之外,我為它們中的每一個都有一個包裝類,它包含一個類類型的數組列表,並且可以將該列表來回轉換為 JSON。
所以我嘗試構建一個通用類,我可以重用它來縮小代碼。 我的嘗試是實現一個接口來保證這兩種方法的存在並在該泛型類中調用它們。 但這似乎不起作用。
知道對象轉換不起作用。 無論如何都不應該調用該函數
public class main {
public static void main(String[] args){
Chumbles<Grumbo> schleem = new Chumbles<>("test");
System.out.println("pause");
}
}
public class Chumbles<T extends Schlami> {
public Chumbles(String s){
T fleeb = T.fromJSON(s);
System.out.println(fleeb.toJSON());
}
}
public class Grumbo implements Schlami {
String s;
public Grumbo(String s) {
this.s = s;
}
@Override
public String toJSON() {
return "GrumboJSON";
}
public static Grumbo fromJSON(String s) {
return new Grumbo("Grumbo Success ");
}
}
public interface Schlami {
String toJSON();
static <T> T fromJSON(String json){
return (T) new Object();
}
}
EDIT2:所以我現在使用通用工廠類和fromJSON的非靜態調用的組合。 使用 new Grumbo().fromJSON(json) 感覺很糟糕,但我會一直使用它,直到找到更好的解決方法。 感謝大家的幫助。
所以,你的問題是為什么在“T.fromJSON(s);” 調用 Schlami 的方法而不是 Grumbo 的方法? 由於 T 擴展了 Schlami,所以 Schlami 始終是調用靜態方法時引用的類。 請注意,您不能覆蓋靜態方法!
我建議只通過“Grumbo.fromJSON();”調用該方法。 如果您需要覆蓋該方法,您可以將 Schlami 轉為抽象類,在 Grumbo 中覆蓋該方法並從對象上下文中調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.