2011-01-30 172 views
3
trait PublicApi{ 

    def sayHi(from:String,content:String) 

} 

獲取參數的名字我知道它在Java中是不可能在運行時 得到「從」和「內容」,但也斯卡拉清單幫我在這裏?像定義從斯卡拉功能

trait PublicApi{ 

    def sayHi(from:String,content:String)(m:Manifest) 

} 

調用m.methodErasure.getArgumentName(0)將「從」

+0

lift-json用paranamer做一些值得一看的東西。 http://paranamer.codehaus.org/ – Monkey 2011-01-30 07:08:53

回答

7

斯卡拉「簽名」確定包含這些參數名稱,正如您正確猜測的那樣。畢竟,他們必須被儲存在的某個地方以使命名/默認參數起作用。您也可以使用scalap來查看這些名稱。

請隨時看看我的初步工作a reflection library

這是一項正在進行的工作,我對目前的功能設置或正確性做出了絕對的保證,但可能會給您一些關於涉及到的內容的想法 - 您甚至可以使用它來提取其參數名稱當前狀態。這也是我正在積極的工作,所以你可以期待它隨着時間的推移而改進......

+0

我(有點無價值)upvoted你和VonC,他是最正確的,而你最有用的:P – 2011-01-31 03:58:37

8

將在其當前的實現,ClassManifest是所有關於type reification,並會一無所知參數名稱。
除非你:

  • 在編譯時增加對參數名的元數據
  • 或使用的削減版本ASM(Java字節碼操作和分析框架)來提取在運行時類調試信息

,爲paranamer沒有(像Monkey提到在評論),你會不會對參數名稱(至少不是Java 8.0之前的任何信息,即使它was initially mentioned for Java6!the proposal仍在進行中)

+0

作爲附錄,本地Scala反射庫必須處理這個問題,因爲它需要反映命名的方法參數。 – 2011-01-30 12:58:19