Coobirdのexcellent answerに続いて、私はJavaでリフレクションが正しく動作するようになっています。私は最初にクラスを投稿して詳細に行くでしょう。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");
}
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) {}
}
:私は、インターフェイスStHandlerを、持っています私はひとつのメソッドread()を使いたいと思っています。 DiStHandlerは、クラスパスから利用可能な実装クラスです。私はここからreadメソッドを呼び出そうとしています。
問題:ライン
StHandler input = (StHandler) clazz.newInstance();
に私はエラーが発生します:ds.DiStHandler cannot be cast to ds.StHandler
私は今、約2時間のためにこれをデバッグしようとしているが、私の人生は何が出て働くことができないためにされています問題は。私がDiStHandlerにimplements StHandler
を持っていない理由は、別のプロジェクトでDiStHandlerを作成しているからです。
私はこれに関するアドバイスをいただき、誠にありがとうございます。事前に非常に おかげで、
M
Mm私はそう思いました.DiStHandlerと同じプロジェクトにインターフェイスクラスStHandlerを置き、DiStHandlerを実装しコンパイルしたら結果のファイルからDiStHandler.classを取り出しますか?返信いただきありがとうございます。 :) – Myn
@ミン:あなたのために何がうまくいくのかは分かりません.... – skaffman
おそらく..私はコードの締め切りに反対していますので、私はすぐに実装する方法を探していますAPIの機能性は、これがうまくいくかどうかを見ることに非常に興味があります。そうでない場合は、アダプタクラスを試してみます。再度、感謝します。 – Myn