4

Java では、次のように記述できます。

Class<SomeClass> foo = SomeClass.class;

私は Scala をいじっていて、もう少し欲しい: 次のように、コンパイル時にメソッド (およびそのジェネリック型) を取得したい:

val foo : Method[...] = SomeClass.class.someMethod

あるいは:

val foo : Method[...] = someObject.class.someMethod

Scalaでこのようなことをする方法はありますか?

4

2 に答える 2

6

おそらく、インスタンスを要求する Java ライブラリに対する相互運用の唯一の例外としてMethod、Scala でこれを行う必要は決してないはずです。

後で呼び出すためにメソッドを渡す必要がある場合。次に、それを部分的に適用してFunctionNインスタンスを作成するか、名前でパラメーターを介して渡すか、最初のケースでファーストクラスの関数として直接作成します。

おそらくテストのために、プライベートな可視性を回避できるようにメソッドを検討する必要がある場合は、そもそもその可視性の制限を回避するために設計をリファクタリングする必要があります。

Scala を探索しているだけで、概念が Java とどのように比較されるかを確認している場合。または、相互運用性の悪いケースに行き詰まるほど不幸な場合は、に相当する構造SomeClass.classclassOf[SomeClass]. うまくいけば、あなたはそれを必要としないでしょう:)

于 2011-09-08T19:44:01.747 に答える
2

クラスの場合:

val classOfClass = classOf[SomeClass]

オブジェクトの場合 ( getClass を使用することの区別は重要です。そうしないと、コンパニオン オブジェクトのクラスにアクセスできなくなるためです):

val classOfObject = SomeClass.getClass

次のようなコードを想定します。

class SomeClass {
  def someMethod() {}
}

object SomeClass

この後、次のような Java リフレクション操作を使用できますClass#getMethod(String,Class<?>...)( someMethodにパラメーターがないと仮定します)。

val method = classOfClass.getMethod("someMethod")
于 2011-09-09T00:39:09.173 に答える