2011-01-30 6 views
3
trait PublicApi{ 

    def sayHi(from:String,content:String) 

} 

からパラメータ名を取得します? m.methodErasure.getArgumentName(0)現在の実装では私はそれがランタイム で「コンテンツ」を「から」を取得し、ためにJavaでは不可能であるが、Scalaのマニフェストはここに私を助けることができることを知っているScalaの機能

+0

リフト・ジャーソンは見て価値のあるかもしれないパラマイザーで何かします。 http://paranamer.codehaus.org/ – Monkey

答えて

7

Scalaの「署名」DOESは、正しく推測すると、これらのパラメータ名を含みます。結局のところ、名前付き/デフォルトのパラメータが動作するためには、どこかにを格納する必要があります。 scalapを使ってこれらの名前を見ることもできます。

a reflection libraryの私の予備作業を見てください。

現在進行中の作業であり、現在の機能セットや正しさについては絶対に保証はしませんが、何が関係しているかを知ることができます。パラメータ名の抽出にも使用できる現在の状態。これは私が積極的に取り組んでいるものなので、時間の経過と共に改善すると期待できます。

+0

あなたとVonCの両方があなたに最も正しかったと私は(ほとんど役に立たなかった)upvoted:P –

+0

@Dylan - upvotesには制限がありません。質問に対する回答を1つだけアップアップするのはまれです。もっと頻繁に、私は彼らが貢献するためにユニークな何かを持っているならば、すべての答えをupvotingしているのを見つけるでしょう。 –

8

「から」戻ってくる呼び出す

trait PublicApi{ 

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

} 

を定義するように、ClassManifestはすべてについてtype reificationで、パラメータ名について何も知らないだろう。
あなたない限り:

  • は、実行時にクラスからデバッグ情報を抽出するために
  • コンパイル時にパラメータ名のメタデータを追加したり、ASM(Javaバイトコード操作と分析フレームワーク)の削減バージョンを使用

paranamerは(のようなMonkeyはコメントで言及)同じように、あなたはとしても、それが、少なくともではないのJava 8.0の前に(パラメータ名のいずれかの情報を持っていません。:the proposalはまだ進行中です)

+0

補足として、名前付きメソッドのパラメータを反映する必要があるため、ネイティブのScalaリフレクションライブラリがこれを処理する必要があります。 –

関連する問題