我通常是C#開發人員,新的Java和我試圖安裝使用泛型一些代碼。我的演示代碼如下所示:即使X應該與T匹配,也不能將X轉換爲T?
// Main.java
public static void main(String[] args) {
MyBase my = getMeStuff();
System.out.println(my.getSomething());
}
private static <T extends MyBase> T getMeStuff(){
return new MyDerived(123);
}
// MyBase/MyDerived.java
public class MyBase {
private final int something;
protected MyBase(int something) { this.something = something; }
public int getSomething() { return something; }
}
public class MyDerived extends MyBase {
public MyDerived(int something) { super(something); }
}
這無法編譯:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from x.MyDerived to T
at x.Main.getMeStuff(Main.java:14)
at x.Main.main(Main.java:9)
至於說,我通常是C#開發,使代碼看起來不錯乍一看。我可以通過改變getMeStuff向(T)添加一個轉換來「解決」這個錯誤,但是這種轉換真的有必要嗎?它聞起來有點像我忘記了什麼?
如果你返回一個固定的已知類型爲什麼要使用一個通用的? –
@Oli因爲實際的實現是更復雜的,並且可以返回許多類型中的一個(它實際上需要其通過反射實例化一類) –