继昨天Coobird的excellent answer之后,我很难获得在Java中工作的反思。我将先发布课程,然后再详细介绍。

StHandler.java

package ds; public interface StHandler {
public void read();
}


DiStHandler.java

package ds;
public class DiStHandler {
public void read() {
System.out.println("Hello world");
}


服务器.java

package ds;
public class Server {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("ds.DiStHandler");
StHandler input = (StHandler) clazz.newInstance();
input.read();
}
catch(Exception e) {}
}


我正在尝试做的事情:我有一个接口StHandler,此刻我想要一个单一的方法:read()。 DiStHandler是一个可从类路径获得的实现类。我正在尝试从这里调用read方法。

问题:上线

StHandler input = (StHandler) clazz.newInstance();


我收到错误:ds.DiStHandler cannot be cast to ds.StHandler

我已经尝试调试了将近两个小时,但是我一生无法解决问题所在。我在DiStHandler中没有implements StHandler的原因是因为我在单独的项目中创建DiStHandler。

我将不胜感激对此的任何建议。
首先十分感谢,

中号

最佳答案

如果DiStHandler没有实现该接口,则不能将StHandler强制转换为DiStHandler。反射不能让您颠覆类型系统-一切仍然必须是类型安全的。

如果DiStHandler无法实现StHandler,则您需要执行其他操作,然后又调用DiStHandler(即适配器类)。

07-24 09:20