как создавать экземпляры объектов, определенных во внешнем Jar, которые реализуют интерфейс с отражением в Java - PullRequest
0 голосов
/ 26 января 2019

У меня есть набор классов, которые расширяют общий класс. Этот класс в свою очередь реализует интерфейс. Я хочу иметь возможность создавать экземпляры объектов, которые расширяют этот класс на основе некоторого строкового значения, используя отражение.

Интерфейс

public interface Vehicle {
    public String reportStats();
}

Общий класс

public class Premium implements Vehicle {
    public String reportStats() {
        return "generic stats";
    }
}

Один тип

public class Volvo extends Premium {

    public void drive() {
         // impl
    }
}

Другой тип

public class Mercedez extends Premium {

    public void drive() {
         // impl
    }
}

Попытка создания экземпляра с использованием отражения

String objectStr = "org.test.project.impl.Volvo";
Class<? extends Vehicle> vehicleClass;
vehicleClass = (Class<? extends Vehicle>) Class.forName(objectStr);

// this does not work
// the error that i get is Volvo cannot be casted to Vehicle
Vehicle vehicle = vehicleClass.cast(vehicleClass.newInstance());
String stats = vehicle.reportStats();

Похоже, что это работает, если классы находятся в одной и той же банке, но если Mercedez или Volvo разложены в отдельную банку в том же пакете, произойдет сбой приведения с java.lang.ClassCastException.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...