2011-12-27 9 views
1
Class<?> clazz = loadClass("Test"); 
Method printSomething = clazz.getDeclaredMethod("printSomething"); 
printSomething.invoke(clazz); 

私はScalaでこれを行う方法を理解しようとしています。 Scalaがリフレクションを処理する方法で、何か単純なものが欠けていると思います。スカラの反射。メソッドを呼び出す?

val clazz = loadClass("Test") 
val printSomething = clazz.getDeclaredMethod("printSomething") 

printSomething.invoke(clazz) 

私の主な質問:Anyオブジェクトは、JavaでClass<?>と同じですか?

+0

あなたのコードは、ここで何が起こっているのかを示すのに十分ではありません。たとえば、「レンダリング」はどこから来たのでしょうか? –

+3

投稿したScalaコードの何が問題なのですか? –

+0

固定コード。まあ、ScalaではClass が何に転送されるのですか?ありがとう。 –

答えて

4

Anyは、JavaではClass<?>と同じではありません。

Anyタイプは、JavaのObjectの代わりに、JavaのObjectとの違いで、文字どっかのプリミティブを含むすべてのスカラーのスーパータイプです。

Class[_]Class[Any]の略)は、すなわち、それはJavaのClass<?>をScalaで提示される方法であり、JavaのClass<?>と同じタイプです。 JavaのようにScalaの型Classのインスタンスは、汎用パラメータとして提供される型に対して基本的な反映機能を提供します。私。 Class[Something]のインスタンスは、クラスSomethingに標準JavaのリフレクションAPIを提供します。 Javaの場合と同じ方法で使用できます。そのインスタンスを取得するには、標準メソッドclassOf[Something]またはinstanceOfSomething.getClassを呼び出します。

主に型消去の問題を解決する拡張リフレクション機能には、常に安定したスナップショットバージョンであるScala 2.10が付属しています。この拡張APIはオブジェクトscala.reflect.runtime.Mirrorを介して提供されます。まだインターネット上にそれに関する多くのドキュメントはありませんが、ここでStackOverflowでいくつかのまともな情報を見つけることができます。

関連する問題