Прежде всего, я бы определенно согласился с @Lesiak. Код client= new ClientB.Builder()....build();
неясен, поскольку многоточие может содержать любое количество полей, которые вы устанавливаете на ClientA / B.
Но чтобы дать вам пример того, как использовать AssistedInject для вашего конкретного экземпляра:
class ClientA extends AbstractClient {
@Inject
public ClientA(ServiceOne serviceOne,
ServiceTwo serviceTwo,
@Assisted MyObject myObject) {
...
}
}
class ClientB extends AbstractClient {
// Same constructor as ClientA
}
Ваш завод будет выглядеть примерно так:
interface ClientFactory {
@Named("ClientA") public AbstractClient getClientA(...);
@Named("ClientB") public AbstractClient getClientB(...);
}
Ваши параметры могут быть разными объектами или чем угодно, но по сути они должны совпадать с аннотацией конструктора @Assisted. Теперь вы можете понять, почему @Lesiak предоставил ответ, который он дал, если ваш компоновщик устанавливает 10 полей на ClientA, тогда ваш фабричный метод должен иметь 10 параметров метода, и он очень неуправляем.
Затем вы бы использовали это с:
@Inject ClientFactory clientFactory;
...
AbstractClient client = clientFactory.getClientA(something, something1, ...);
...