В Java уже есть универсальный тип для фабричных методов.Это Supplier<T>
.
Вы, вероятно, должны использовать Supplier<Product>
вместо вашего Creator
.
Затем вы обычно используете лямбда-функцию или ссылку на метод для предоставления экземпляра.
Если вы хотите вызвать, например, setCreator(Supplier<Product>)
, и вы хотите, чтобы он создал ваш подкласс MyProduct
, то просто позвоните setCreator(MyProduct::new)
.
Lambdas, позволяющие выполнять более сложные конструкции безсоздание подклассов, даже когда соответствующий конструктор не существует, например setCreator(() -> new MyProduct(CONST_VAL_1, UtilityClass.getCurrentValue2());