[Java] 未知の実装クラスを持つ汎用ファクトリ


Answers

この質問から:

おそらくこれを試してみませんか?

public class FruitHandlerFactory<A extends FruitHandler<B>, B extends Fruit>
Question

2つのインターフェースを仮定しましょう:

public interface FruitHandler<T extends Fruit>
{
    setFruit(T fruit);
    T getFruit();
}

public interface Fruit
{
}

今では、 FruitHandlers (例: AppleHanderOrangeHandlerなど)を作成するファクトリが必要ですが、 FruitHandlerFactoryは両方のインターフェイスの実装クラスについて必要なことを知らない( javaパラメータ化された汎用静的ファクトリなど )。 FruitHandlerFactoryはこのように動作するはずです( OrangeHandlerFruitHandlerOrangeOrangeHandler実装していFruitHandler )。

FruitHandlerFactory fhf = new FruitHandlerFactory<OrangeHandler,Orange>();
OrangeHandler fh = fhf.create();
Orange orange = (Orange)fh.getFruit();

これは工場でなければなりません:

public class FruitHandlerFactory<A extends FruitHandler, B extends Fruit>
{
    public FruitHandler create()
    {
        FruitHandler<Fruit> fh = new A<B>();   //<--- ERROR
        fh.setFruit(new B());
        return fh;
    }
}

このエラーが発生する場所:

The type A is not generic; it cannot be parameterized with arguments <B>

ところで、 create()メソッドを静的にすることは可能ですか?