继昨天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
(即适配器类)。