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 :(得分:4)
Any
与Java中的Class<?>
不同。
Any
类型是Java的Object
的Scala替代扩展:与Java的Object
不同,它是Scala中所有内容的超类型,包括基元。
Class[_]
(Class[Any]
的缩写)与Java的Class<?>
的类型相同,即它是Scala中Java Class<?>
的呈现方式。 Scala中类型Class
的实例与Java中的实例一样,提供了作为其泛型参数提供的类型的基本反射功能。即Class[Something]
的实例提供了类Something
上的标准Java反射API。您可以像在Java中一样使用它。要获取该实例,请调用标准方法classOf[Something]
或instanceOfSomething.getClass
。
Scala 2.10提供了主要针对类型擦除问题解决方案的扩展反射功能,这些版本非常稳定,您可以随时下载。此扩展API通过对象scala.reflect.runtime.Mirror
提供。互联网上没有太多关于它的文档,但你可以在StackOverflow上找到一些不错的信息。