如何实例化在外部Jar中定义的对象,这些对象在Java中实现带有反射的接口

时间:2019-01-26 09:23:26

标签: java reflection interface

我有一组扩展通用类的类。此类又实现了一个接口。 我希望能够使用反射实例化基于某个字符串值扩展此类的对象。

接口

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();

如果这些类位于同一个jar中,则这似乎起作用,但是如果将Mercedez或Volvo分解到一个单独的jar中,则在同一个package下,强制转换失败,并显示java.lang.ClassCastException。

谢谢。

0 个答案:

没有答案