0

私はそれを知りません、どうすればファイルを読むことができますか。FK.java ファイルを読みたいのですが、class not found 例外が発生します。FK は注釈 Java ファイルです。(「src/annotations/FK.java」を試しましたが、うまくいきませんでした。

private static String clazz = "src/annotations/FK";

public static List<Object> GetAnnotations() throws ClassNotFoundException{

    Class<?> c;
    c = Class.forName(clazz);

    List<Object> result = new ArrayList();


    Field[] fields = c.getDeclaredFields();
    for (int j = 0; j < fields.length; j++)
    {
        Annotation[] annot = fields[j].getAnnotations();
        for (int k = 0; k < annot.length; k++)
        {
            result.add(annot[k].annotationType());
        }
    }
    return result;
}

public static void main(String[] args) throws ClassNotFoundException {
    System.out.println(GetAnnotations());
}
4

2 に答える 2

1

.クラスの名前には、スラッシュ ( '/')ではなくドット ( ) を含める必要があります

private static String clazz = "annotations.FK";

それで

Class.forName(clazz);

指定されたクラスパスからクラス をロードしようとします。annotations/FK.class.java ファイルしかない場合は、最初にコンパイルする必要があります。

編集:コメントに基づく固定パス

于 2012-06-15T18:26:16.753 に答える
0

問題は、注釈付きクラスのClassオブジェクトを間違った構文で取得しようとしていることです。

Class.forName(String)-methodは、完全修飾されたJavaクラス名をパラメーターとして受け取ります。これは、Javaファイルで宣言されたクラスを含むパッケージの名前であり、直後にクラス名が続きます。あなたの場合、それはおそらく"annotations.FK"です。

もう1つの注意点は、クラスのJavaソースコードファイルを持っているだけではうまくいかないということです。クラスパスにコンパイル済みのクラスが必要です。

簡単な例を次に示します。

// mytoplevelpackage/mypackage/MyClass.java

package mytoplevelpackage.mypackage;

public class MyClass {}


// mytoplevelpackage/OtherClass.java

package mytoplevelpackage;

public class OtherClass {
  public static void main(String[] args) throws ClassNotFoundException {
    Class c = Class.forName("mytoplevelpackage.mypackage.MyClass");
  }
}
于 2012-06-15T18:41:00.450 に答える