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