java interface
Привет всем.
у меня такой вопрос.
есть интерфейс:
public interface TestInterface {}
есть два класса, которые его имплементируют:
public class A implements TestInterface{
public A(BigInteger value){
System.out.println("This is A");
}
}
public class B implements TestInterface{
public B(BigDecimal value){
System.out.println("This is B");
}
}
Нужно что бы в зависимости от параметра (тут BigInteger и BigDecimal) создавался конкретный объект.
Что то типа TestInterface ti = new TestInterface(BigInteger bi){}
Это возможно сделать? если да то как?
Я не знаю, на сколько могут отличаться классы А от В, но чисто по описанию я бы реализовал через Generic.
кстати тоже хороший способ. Но у меня будет не только A и B. У меня будет A,B,C,D,E классы.
А вообще мне идея с интерфейсом не очень нравится, тк все классы имеют свои методы, которые в других классах не существуют. Но это идея бетроера. Завтра буду говорить с ним по этому поводу
Я поговорил сегодня с Бетроером. Он против dependency injection, говорит что это может повлиять на всю систему. И ему подходит вариант с factory. Но мне не нравится то, что интерфейс будет содержать все методы из всех классов. Например класс A должен будет реализовать методы, которые ему не нужны, а нужны классу B.
У Бетроера что очередная параноя на базе ДИ? ![]()
https://msdn.microsoft.com/en-us/library/aa288059(v=vs.71)...
Как может номер "привязанный" к классу развалить систему и где он там ДИ увидел? В спецочках наверное.
Не, если очень постарться то можно всё сделать, но это надо сильно стараться ![]()
Но мне не нравится то, что интерфейс будет содержать все методы из всех классов
Нафига? Интерфес общий, а имплементации различные.
Если нужно в интерфейс выкидывать все методы, то необходимо срочно искать другого Бетроера.
получается, что класс A и B содержат ненужные методы, тк эти методы в интерфейсе. Классам же на верху (SomethingA, SomethingB) нужны только определенные методы. Но эти классы должны знать только интерфейс.
Есть какое-то разумное решение у этой проблемы?
Ps uml набросал на коленке. Извиняюсь за качество
Тогда, как вариант: пишете еще одну архитектуру классов, т.е. интерфейс и реализации для "параметров", вроде IParameters, ParameterA, ParameterB,... Тогда в методе do для классов A,B,C,...будет один аргумент типа IParam, ну а каждая из реализаций будет использовать свою реализацию параметров ParameterA,...
Я если честно уже не уверен, что мне делать
Если не уверены, то нужно делать как шеф хочет, только чтобы было в письменной форме, без всяких вариантов - "а Вы меня не так поняли"
По идее он хочет абстрактную фабрику классов.
https://refactoring.guru/ru/design-patterns/abstract-facto...
https://en.wikipedia.org/wiki/Factory_method_pattern
http://www.oodesign.com/factory-method-pattern.html
методы могут быть разные с разными параметрами.
Понятно... архитектура от того же "Бетроера" ![]()
Тогда самое простое, как уже написали: добавляем промежуточный класс/интерфейс для списка параметров. И его пользуем вместо списка различных параметров.





