我有很多這方面的用例,圍繞着現有的Java庫和新的Scala代碼之間的互操作。我選擇的用例是我認爲最簡單的用例。有沒有辦法從Java類創建一個新的Scala對象
使用案例:
我上提供的JUnit運行一段斯卡拉測試(這樣我就可以得到在Eclipse我可愛的紅/綠條)工作 亞軍需要有一個構造函數與Java類作爲參數。因此,在斯卡拉我可以做到以下幾點:
class MyRunner(val clazz: Class[Any]) extends Runner {
def getDescription(): Description
def run(notifier: RunNotifier)
}
當我使用兩種
@RunWith(MyRunner)
object MyTestObject
或
@RunWith(MyRunner)
class MyTestClass
然後亞軍確實是正確的初始化,並通過適當的類對象
不幸的是,我現在想要做的是「獲得」MyTestObject對象,或創建一個M yTestClass,它們都是Scala實體。我更喜歡使用Scala Reflection,但我也想使用標準的Junit jar。
我做了什麼
以下Stackover流問題是教育,但不相同的問題。有最近的問題,我能找到
- How to create a TypeTag manually?
- Any way to obtain a Java class from a Scala (2.10) type tag or symbol?
- Using Scala reflection with Java reflection
在http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.html的環境,宇宙和鏡子討論是很好的,和其他階反射的類似文件也有幫助。通過它大部分是關於斯卡拉反射。
我瀏覽了Scaladocs,但是我對Scala反射的瞭解還不夠(讓)讓我得到我想要的東西。
編輯: 如這裏問的是,是由反射創建的類的代碼
@RunWith(classOf[MyRunner])
object Hello2 extends App {
println("starting")
val x= "xxx"
}
所以有趣的是,提出如下使用調用的模塊$該字段不打印任何解決方案並且x的值爲空
我發現VAL實例= clazz.getField(「MODULE $」)獲得(空)的作品來獲取。目的。這種推薦方式似乎有點「神奇」? – 2013-05-09 11:03:53
這個問題是非常好的http://stackoverflow.com/questions/11020746/get-companion-object-instance-with-new-scala-reflection-api/11031443#11031443 – 2013-05-09 11:34:34