继昨天Coobird的出色答案之后,我无法在Java中反思.我先发布课程,然后详细介绍.
StHandler.java
package ds; public interface StHandler {
public void read();
}
Run Code Online (Sandbox Code Playgroud)
DiStHandler.java
package ds;
public class DiStHandler {
public void read() {
System.out.println("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
Server.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) {}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是:我有一个接口StHandler,目前我想要一个方法:read().DiStHandler是一个可从类路径中获得的实现类.我试图从这里调用read方法.
问题:就行了
StHandler input = (StHandler) clazz.newInstance();
Run Code Online (Sandbox Code Playgroud)
我收到错误: ds.DiStHandler cannot be cast to ds.StHandler
我一直试图调试这个近两个小时但是因为我的生活无法解决问题所在.我implements StHandler
在DiStHandler中没有的原因是因为我在一个单独的项目中创建了DiStHandler.
对此我有任何建议,我将不胜感激.首先十分感谢,
中号
你可以不投DiStHandler
给StHandler
,如果DiStHandler
不实现该接口.反射不会让你破坏类型系统 - 一切都必须是类型安全的.
如果DiStHandler
无法实现StHandler
,那么你需要其他的东西,然后调用DiStHandler
(即适配器类).