@ axtavt прав.Вы не можете заставить подкласс предоставлять конструкторам определенные подписи.(В неотражающем случае нет никакого смысла, потому что конструкторы Java не являются полиморфными. И отражение всегда немного ... некрасиво.)
Если вы хотите создать полиморфный объект, вы можетеиспользуйте шаблон Factory.
public interface BaseFactory {
Base create(int arg1, String arg2);
Base create(int arg1, float arg2);
}
public class Foo implements Base { .... }
public class FooFactory implements BaseFactory {
public Base create(int arg1, String arg2) {
return new Foo(arg1, arg2);
}
public Base create(int arg1, float arg2) {
return new Foo(arg1, Float.toString(arg2));
}
}
Единственная сложность заключается в том, что тип возвращаемого значения фабричного метода будет базовым.Следовательно, обычно использование фабричного метода должно приводить созданный объект к ожидаемому подтипу.Вероятно, вы можете избежать этого, используя дженерики ...
С положительной стороны, использование Фабрики может позволить вам избежать использования отражения в первую очередь.И даже если нет, вы можете рефлексивно вызывать фабричные методы с гарантией того, что если фабрика реализует фабричный интерфейс, она предоставит методы с ожидаемыми сигнатурами.