2011-12-27 138 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

您的代码不够完整,无法告诉这里有什么 - 例如,“渲染”来自哪里。 – 2011-12-27 21:09:20

+3

你发布的Scala代码有什么问题,如果有的话? – 2011-12-27 22:00:59

+0

固定代码。那么我或多或少地问什么Class 转移到斯卡拉?谢谢。 – 2011-12-28 03:53:15

回答

4

Any与Java中的Class<?>不一样。

Any类型是Java的Object的扩展的替代方案:与Java的Object不同,它是从字面上理解Scala中的所有东西的超类型,包括基元。

Class[_](简称Class[Any])与Java的Class<?>类型相同,即它是Java的Class<?>在Scala中呈现的方式。 Scala中类型为Class的实例与Java中的实例类似,它提供的基本反射功能超过了作为其通用参数提供的类型。即Class[Something]的实例提供了标准的Java反射API,其类别为Something。您可以像在Java中一样使用它。要获得该实例,请调用标准方法classOf[Something]instanceOfSomething.getClass

主要针对类型擦除问题的解决方案的扩展反射功能随Scala 2.10一起推出,它是您可以随时下载的非常稳定的快照版本。该扩展API通过对象scala.reflect.runtime.Mirror提供。互联网上没有太多的文档,但是你可以在StackOverflow上找到一些体面的信息。