Как создать конструктор контейнера, поэтому при создании экземпляра он вызывает правильный конструктор в зависимости от того, передан ли ему параметр A или B?
Я думаю, что вы спрашиваете о конструкторах для класса Container
, а не для интерфейса Interface
(который не может иметь какой-либо) или для классов A
и B
(так как вы заранее предполагают, что объект одного из этих типов уже представленный как параметр). В том случае, если статический тип выражения параметра является одним из A
или B
, вы можете добиться того, что вы, как просто предоставляя перегруженные конструкторы:
public Container(A interface) {
// ...
}
public Container(B interface) {
// ...
}
С другой стороны, если вы предположить, что это известно только, что параметр реализует Interface
, и все же вы хотите инициализировать Container
по-разному в зависимости от того, какая реализация предусмотрена, тогда вы должны подумать еще раз. Это можно сделать, например, с помощью оператора instanceof
для тестирования во время выполнения, реализация которого предусмотрена, но почти любой такой механизм является проявлением плохого дизайна, и на практике это может вызвать проблемы ,
Поле 'field' будет установлено по умолчанию, а интерфейсы не могут быть созданы. – Ramanlfc
Вы не можете создать экземпляр интерфейса, вам нужно создать экземпляр класса, соответствующего этому протоколу – luk2302
' B.class. newInstance() 'будет создавать экземпляр B, если у вас действительно есть класс B в качестве параметра. Тем не менее, все выглядит немного подозрительно, как дизайн. – pvg