Я уверен, что есть какое-то решение или шаблон, но у меня возникли проблемы с формулировкой вопроса, чтобы найти правильный ответ.Возврат объекта интерфейса из метода без экземпляра (неизвестного) конкретного типа
У меня есть интерфейс, ИКАР:
public interface ICar {
void SetMake(String make);
String GetMake();
}
У меня есть класс, Автомобиль:
public class Car implements ICar {
private String make;
public void SetMake(String make) { this.make = make; }
public String GetMake() { return make; }
И у меня есть метод в другом классе, который не знает о машине. В духе полиморфизма я хотел бы этот метод, чтобы вернуть ИКАР, чтобы кто-то мог создать свою собственную реализацию ИКАР и использовать метод для своего автомобиля:
...//class preamble
public ICar myMethod() {
ICar myCar = new ICar();
myCar.SetMake("Ferrari");
return myCar;
}
Я не уверен, почему что-то вроде этого не может работать. Поскольку ICar содержит метод SetMake, каждая реализация также должна содержать этот метод. Разумеется, jvm может каким-то образом помещать вызовы метода, а затем запускать их, когда доступна конкреция методов?
Еще одна идея - передать вновь созданную реализацию ICar в качестве параметра myMethod и вызвать его методы, но я чувствую, что это не может быть такой чистой реализацией, поскольку мне нужно будет создать экземпляр Car каждый время. Кроме того, если нет конструктора без параметров, мне пришлось бы создавать его с помощью фиктивных данных (также не чистых).
Я чувствую, что мне не хватает понимания, чтобы понять, как реализовать что-то подобное, и задавался вопросом, сможет ли кто-нибудь помочь?
Спасибо.
Спасибо, мне нравится этот ответ, чтобы быть менее очевидным и демонстрируя реализацию. Думаю, я поеду на заводскую дорогу. – Tom
@RicketyRick: добро пожаловать! –