外部にJarファイルを置いてその中の特定のアノテーションが使われているクラスの中の関数を読み込み、アプリの拡張性を広げるというものを作ろうと思っています。
そこで以下のようなクラスを作りました。
Java
1import java.lang.annotation.ElementType; 2import java.lang.annotation.Retention; 3import java.lang.annotation.RetentionPolicy; 4import java.lang.annotation.Target; 5 6@Retention(RetentionPolicy.RUNTIME) 7@Target(ElementType.TYPE) 8public @interface Mod { 9 String name() default ""; 10}
そして読み込む側では
Java
1Class class = Class.forName(entry.getName().replace("/", ".").replace(".class", ""),false,loader); 2for(Annotation anno : class.getAnnotations()) { 3 if(anno.toString().startsWith("@Mod")) { 4 Mod m = (Mod) class.newInstance(); 5 } 6}
※ZipEntry(entry変数)、外部Jarを読み込みClassLoaderに変えるもの(loader変数)を使っています
そしてMOD側は
Java
1@Mod(name="TestMod") 2public class TestMod { 3 4}
というようなソースコードを書きました。そして実行をすると
java.lang.ClassCastException: TestMod cannot be cast to Mod
と、キャストできないとエラーが出てしまいます。(読み込む側Mod m = (Mod) class.newInstance();の部分)
どうしたらうまくキャストができますか?
回答1件
あなたの回答
tips
プレビュー