我通常是 C# 开发人员,刚接触 Java,我正在尝试使用泛型设置一些代码。我的演示代码如下所示:
// 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) 添加强制转换来“解决”这个错误,但是这种强制转换真的有必要吗?有点味道,好像忘记了什么?