2014-10-31 55 views
0

我試圖從尚未編譯的文件(* .java)中獲取java.lang; Class對象。我開發了一個NetBeans平臺的插件,我知道如何找到爲源文件夾(src)指定classLoader,然後我想獲取指定文件的Class對象。我可以調用loadClass來獲取它,但是這個dosent在沒有編譯的文件上工作。例如:如何從classLoader獲得java.lang;類而不是編譯文件* .java

 ClassPath classPath = ClassPath.getClassPath(someFileObject, ClassPath.SOURCE); 
     ClassLoader loader = classPath.getClassLoader(true); 
     Class myLookingForClass = loader.loadClass("web.users.User"); 
     // it is file User.java in package web.users 

它是一種獲得它的方法嗎?

UPDATE:

好吧,我想實現機制whitch將產生自己的身體動態類(方法,變量等)。要做到這一點,我需要類的定義例如:方法返回類型或一些變量類型。

示例方案:

用戶工作的IDE(Netbeans的),他創造了一些類(但不編譯)。這個類將在某些類中使用,我們將在某些事件後動態創建(例如使用某個按鈕)。現在,將ClassLoader和加載類定義爲java.lang.Class並使用它們是沒有問題的。但是文件需要被編譯。現在我想知道是否有某種方式從文件中獲取java.lang.Class,例如「someFile.java和打包某些包

+0

類加載器無法加載未編譯的類;它應該怎麼做? – 2014-10-31 13:04:01

+0

這味道像一個XY問題。你爲什麼要這樣做?你的根本問題是什麼? – 2014-10-31 13:05:10

回答

1

沒有辦法爲尚未編譯的類有一個Class對象

你必須明白,java.lang.Class確實是一個反射 API表示由JVM加載,而不是僅僅在一般的Java類的抽象類。ClassLoader本身也有一個類文件結構才起作用。.java文件沒有什麼用運行 Java:雖然沒有編譯它們只是一個文本文件。

另一方面,您可以使用Java編譯器API以編程方式編譯java文件,然後訪問編譯的類。請參閱javax.tools以瞭解如何使用此API。也許這個SO question也會有幫助。

+0

好吧,我看到我需要先使用JavaCompiler和動態編譯文件,然後從該動態編譯文件中獲得java.lang,Class – 2014-10-31 13:30:58