Я хотел бы использовать зависимость инъекций для Implementation
в этой ситуации:Вводят зависимость для типа инстанциирован внутри цикла
public interface Implementable{[...]}
public class Implementation implements Implementable{[...]}
public class DummyClass()
{
private List<Implementable> testList;
public DummyClass()
{
testList = new ArrayList<Implementable>();
for(int i = 0; i < 10; i++)
{
Implementable testVar = new Implementation(i);
testList.add(testVar);
}
}
}
Насколько мне удалось собрать, это не представляется возможным. Ни путем инъекции через конструктор, ни с помощью дженериков. Кроме того, я бы предпочел собственное решение, которое не полагается на внешнюю библиотеку для достижения этого.
Edit: Любое решение будет требовать, чтобы DummyClass
не должны знать о том, какая реализация InterfaceType
должна быть реализован внутри цикла.
Я думал об использовании дженериков, но это не удалось, так как InterfaceType testVar = new T(i);
не допускается. Кроме того, метод newInstance()
был невозможен из-за конструктора, требующего аргументов. В то время как это все еще было возможно, это потребовало слишком большого отражения (getConstructor
) и потери безопасности типа для моего вкуса чистого подхода.
Я совершенно доволен, что то, чего я пытаюсь достичь, не может быть достигнуто ни в какой рекомендации. Этот вопрос в надежде, что я что-то пропустил.
Edit2: Я пытался идти с подобным решением той предоставленной drewmoore, но наткнулся на изъян, что я не думал о.
Интерфейсы не заявляют каких-либо требований к конструктору. С помощью этого метода мне пришлось бы использовать один и тот же конструктор во всех реализациях интерфейса.
Это заставило меня задуматься о шаблоне строителя. Который по-прежнему приходит к тому же предостережению, что и интерфейс, необходимо будет определить методы построения и, следовательно, снова придется создавать требования для того, как все реализации должны быть построены.
Есть ли другой способ для отложенного строительства? То есть, это средство, которое позволило бы мне ввести экземпляр реализации, которую я хотел бы использовать (public DummyClass(InterfaceType implementation)
), но только конструировать (или строить или инициализировать) его внутри цикла, где он тогда будет возвращать копии самого себя.
Но с другой стороны. Я все больше чувствую, что то, чего я пытаюсь достичь, будет невозможно. Или что это не должно быть сделано из-за неоправданной дополнительной сложности или наложенных ограничений. Тогда я бы скорее согласился с прямой зависимостью этого класса от реализации и поблагодарил drewmoore за ее понимание.
Вопрос не ясно для меня. Не могли бы вы добавить более подробную информацию о том, чего вы пытаетесь достичь? – Numbers
Я бы хотел, чтобы 'DummyClass' не зависел от' Реализация'. Только на интерфейсе 'InterfaceType'. Единственный способ, который я вижу, чтобы достичь, кажется, инъекции. Только в моем случае я не могу просто вставить экземпляр и использовать его, потому что цикл создает разные экземпляры в зависимости от счетчика циклов. –