Как решить, какую функцию выбрать только в зависимости от типа назначенного значения в Java - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть следующий класс

public class MyItems {
    ItemA myItemA1 = new ItemA();
    ItemA myItemA2 = new ItemA();
    ItemB myItemB1 = new ItemB();
}

Возможно ли реализовать класс Factory / Creator, чтобы класс можно было изменить на:

public class MyItems {
    ItemA myItemA1 = Factory.create();
    ItemA myItemA2 = Factory.create();
    ItemB myItemB1 = Factory.create();
}

или, возможно, на

public class MyItems {
    ItemA myItemA1 = Factory.create<>();
    ItemA myItemA2 = Factory.create<>();
    ItemB myItemB1 = Factory.create<>();
}

Я думаю о назначении списков:

    List<String> list = new ArrayList<>();

, где у вас также есть только ромб с правой стороны.

Примечание: При необходимости вы можете вводить дженерики для объектов ItemX

1 Ответ

0 голосов
/ 15 декабря 2018

Возможные варианты того, что вы пытаетесь сделать, были бы такими:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...