2012-10-12 54 views
1

因爲一個Java文件可以編譯成任意數量的類文件,有沒有一些方法可以從編譯器API中找出哪些類文件已經生成?它輸出到一個可能有其他文件的目錄,所以我不能只看這個。使用Java編譯器API,創建了哪些類?

+0

@Nambari:你可以在一個java文件中定義多個類,但只有一個可以是公共的。 – leonbloy

+0

@Nambari,在一個Java文件的頂層可以有多個java類。唯一的限制是,它們中的至多一個可以是公共的,並且它必須具有與文件名稱相同的名稱。 –

+0

是的,正確的。我同意。 – kosa

回答

3

我想出了一些似乎可行的東西。 * FileManager有回調來獲取事物的位置,包括輸出的東西。您可以使用ForwardingJavaFileManager對其進行包裝,覆蓋並存儲來自呼叫的值。

final List<String> classFiles = new ArrayList<>(); 
StandardJavaFileManager inner = compiler.getStandardFileManager(null, null, null); 
JavaFileManager fileManager = new ForwardingJavaFileManager(inner) { 
    @Override 
    public JavaFileObject getJavaFileForOutput(Location location, String className, 
       JavaFileObject.Kind kind, FileObject sibling) throws IOException { 
     JavaFileObject o = super.getJavaFileForOutput(location, className, kind, sibling); 
     classFiles.add(o.getName()); 
     return o; 
    } 
}; 
+0

+1酷 - 它的工作原理:-) –

0

我不認爲我們可以發現通過使用任何給定的引用的Java編譯器API創建的非公共類。您需要解析(或應用reg表達式)輸入java文件以標識可用的類名稱。一旦你獲得了類的名字,你應該能夠使用自定義類加載器加載它們。

Satheesh