2011-11-10 69 views
2

是否有可能(是否有一條整潔的方法)使用反射來獲得課堂評論?我可以閱讀.java文件並獲得評論,但它可能不會有一個,所以如果我查找/ **的第一個實例,然後* /我可能會結束方法評論。你能否以課程方式獲得課堂評論

請你可以避免代碼解決方案,因爲我想自己破解這個。

+0

你確切的目標是什麼?註釋不是生成代碼的一部分,因此它在運行時不可用。你可能想看看Javadoc doclet是否能夠以某種方式幫助你。 –

回答

6

註釋不會保留在類文件中,您必須返回原始來源以獲取註釋。

如果您在運行時需要信息,它應該存儲在註釋中這可以在運行時訪問。

+2

請參閱http://download.oracle.com/javase/tutorial/java/javaOO/annotations.html,並作爲使用註釋的軟件示例,請參閱http://static.springsource.org/spring/docs/2.5.6/ reference/metadata.html – VolkerK

2

這是不可能的。評論從你的編譯代碼中剝離。

+1

或者換句話說,編譯器會忽略註釋。 –

+0

如果我有權訪問.java文件,該怎麼辦 – Biscuit128

+0

@PeterLawrey我不認爲它們真的被編譯器忽略,因爲它們在註釋處理過程中可以訪問,但它們只是不用於輸出實際的代碼。 –

2

據我所知,沒有辦法通過反射做到這一點。我懷疑評論/ JavaDoc在編譯之後會轉移到實際的類文件中。一種方法是使用註釋處理器。註釋處理不使用反射,而是使用源模型/鏡像的編譯時等價物。它的確可以讓你獲得程序元素的文檔,就像類聲明或方法一樣。您可以在運行時使用元數據文件。

2

我認爲你不能通過反射來獲得評論,因爲編譯器會截斷註釋,所以它們不在.class中。例如,只有當你告訴它源代碼放在哪裏時,Eclipse纔會給你提供javadoc幫助。

2

如果您確實想要這樣做,您可以編寫一個解析源文件的(外部)應用程序,並提取註釋。然後,與regex,你可以只採取你感興趣的意見(例如,關鍵詞「類」上的那些,或任何你想要的。

但如果你不介意我問,爲什麼如果你真的需要訪問這些信息,那就意味着你需要將它提升到除了註釋以外的其他東西,就像應用程序中的某些字符串常量或者類/方法中的註釋一樣,以便保留它由編譯器和可以使用常規方法進行訪問。

0

除了已經被其他人所說的事情,從源java文件讀取是反思。反思編譯代碼,.class文件進行操作。

+0

確實,閱讀java源代碼只是正常的文件處理。 – Guillaume