0

私はJava用のコンパイラを作成しており、java.langパッケージをすべてのソースファイルに暗黙的にインポートしたいと考えています(これは、私が知っているほとんどのJavaコンパイラが行うことです)。

そのためには、パッケージ内のすべてのクラスのすべてのクラスのセット(つまり、 Set<Class<?>>)またはすべての修飾名のセット(つまり、)のいずれかを取得する必要があります。Set<String>

このページからリフレクションAPIを見てきましたが、私のプロジェクトの構造(およびその他の要因)により、適切ではない候補になっています。

だから私はそのようなクラスを取得する他の方法があるかどうか疑問に思っています(もちろん、物をハードコーディングする以外に!)?Javaの種類で最も人気のあるパッケージであるという事実java.langは、何らかの方法があるはずであることを示唆しています。

4

1 に答える 1

0

試す

    String path = Object.class.getResource("Object.class").getPath().replace("!/java/lang/Object.class", "");
    ZipFile z = new ZipFile(new File(new URI(path)));
    Enumeration<? extends ZipEntry> e =z.entries();
    Set<String> s = new HashSet<String>();
    while(e.hasMoreElements()) {
        String n = e.nextElement().getName();
        if (n.matches("java/lang/\\w+\\.class")) {
            s.add(n);
        }
    }
于 2013-02-13T05:18:24.710 に答える