Возможные варианты того, что вы пытаетесь сделать, были бы такими:
ItemA myItemA1 = (ItemA) Factory.create<ItemA>();
или
ItemB myItemB1 = Factory.createItemB();
, поскольку, как уже упоминалось, Фабрика не может угадать, какой типвозвращать (он даже не может возвращать разные типы, поэтому приведение необходимо).Если вы можете придумать логику, которая позволяет фабрике угадывать тип возврата 100%, то время, когда может работать что-то вроде ItemA myItemA1 = (ItemA) Factory.create()
, но это абсолютно нарушит читабельность вашего кода, поэтому не делайте этого.
Существует один экземпляр этой проблемы, где Factory.create()
может быть реализован без каких-либо проблем: когда все ваши ItemX
-Типы являются интерфейсами.В этом случае вы можете создать класс
public class ItemGeneric implements ItemA, ItemB, ItemC {
//implementation off all three interfaces here
}
и позволить своим фабричным alwaxs вернуть ItemGeneric
.