私はファクトリメソッドのように作用するFoo
オブジェクトを生成するメソッドを持つ抽象基底クラスがあります。抽象テンプレートメソッドとしてファクトリーのようなメソッド
FooBar fooBar = (FooBar)myDerivedClass.createObject();
これは次のとおりです。コードはすなわち、バックそれは、もともとあったものに戻り値をキャストするMyBaseClass#createObject
ニーズを呼び出すため、
public class Foo
{
}
public class FooBar extends Foo
{
}
public abstract class MyBaseClass
{
abstract public Foo createObject();
}
public class MyDerivedClass extends MyBaseClass
{
@Override
public Foo createObject()
{
return new FooBar();
}
}
これは次善である:今私のクラスには、次のようになり私のズボンを外して、もう一度やり直すように。
は、私はしばらくの間、Javaのジェネリックを使用していないが、私は、テンプレートメソッドにその抽象メソッドを回すことができる期待していた、何かのように:私は、Eclipseから次のエラーを取得
public abstract class MyBaseClass
{
abstract public <T extends Foo> T createObject();
}
しかし、ときに私派生クラスでメソッドを実装しよう:
public class MyDerivedClass extends MyBaseClass
{
@Override
public <FooBar extends Foo> FooBar createObject() // The type parameter FooBar is hiding the type FooBar
{
return new FooBar(); // Cannot instantiate the type FooBar
}
}
私は私が起こって不要なキャストを削減する私の問題に適切なソリューションを適用していないと思います。何か案は?
これはJava 1.6の場合です。あなたはおそらく、(一般的な方法ではなく)一般的なクラスを探している
おそらく、Javaジェネリックの消去の影響を理解する必要があります。 http://docs.oracle.com/javase/tutorial/java/generics/erasure.html – esej
関連:http://stackoverflow.com/q/10127502/697449 –