java interface
Generic можно было бы использовать, если бы методы были одинаковые.
public interface TestInterface<T> {
public void a(T value);
}
public class TestImplA implements TestInterface<BigInteger> {
@Override
public void a(BigInteger value) { }}
Но тут названия методов отличаются, в первом случае А, а во втором - B:
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");
}
}
Архитектура явно кривая, грубо нарушено Single Responsibility Rule, классы огромные итд. Необходимо разбить интерфейс на несколько, с использованием дженериков, выделить отдельные классы и так далее. Толку от использования общего интерфейса, если методы все равно разные, и по идее впоследствии в коде нужно будет делать проверки при их вызове в зависимости от аргумента?
TestInterface worker = TestInterfaceFactory.getTestInterface(value);
if (value instanceof BigInteger) {
worker.a(value);
} elseif (value instanceof BigDecimal) {
worker.b(value);
} else {
...
Но в любом разе решение - это фабрика:
public class TestInterfaceFactory {
public static TestInterface getInstance(Object value) {if (value instanceof BigInteger) {return new TestImplA();} else if (value instanceof BigDecimal) {return new TestImplB();} else {throw new IllegalArgumentException("unsopported value type");}}}