私は通常、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実際の実装はより複雑で多くの型のうちの1つを返すことができるため(実際にはリフレクションによってインスタンス化されるクラスが必要です) –