我試圖得到classOf[the-abstract-class-Option]
,但我總是得到classOf[the-Option-*object*]
。我怎樣才能得到抽象類而不是?我如何獲得Scala的選項類,所以我可以將它傳遞給getDeclaredMethod()
Option.getClass
和classOf[Option[_]]
給我class scala.Option$
。
編輯:我不需要問這個;突然,classOf[Option[_]]
工作正常,很奇怪。 /編輯
背景:
我試圖經由反射調用接受一個Option[String]
參數的方法。
它的簽名看起來像這樣:...(..., anySectionId: Option[String], ...)...
在我可以調用該方法之前,我通過getDeclaredMethod
查找它。但要做到這一點,我需要一個參數類型列表,我將通過調用_.getClass
來構建參數類型,我將對該方法給出每個參數。但對於選項實例,_.getClass
返回classOf[None]
或classOf[Some]
,這會使getDeclaredMethod
失敗,因爲(?)簽名基於Option not Some/None。
下面的代碼:
val clazz: Class[_] = Play.current.classloader.loadClass(className)
val paramTypes = arguments.map(_ match {
case None => Option.getClass // gives me the object, not the abstract class
case _: Some[_] => classOf[Option[_]] // this also gives me the object :-(
case x => x.getClass // results in None or Some for Option instances
})
val m: jl.reflect.Method = clazz.getDeclaredMethod("apply", paramTypes: _*)
和上面的最後一行未能與任何Option
參數(否則一切工作正常)的方法。
我討厭當這種情況發生。 –