断言通过运行时反射恢复的 class 是另一个 class 的子class
Assert that class recovered through runtime reflection is a subclass of another class
我正在尝试调用一个方法:
def doSomething[A <: Super : ClassTag] : B = { ... }
该方法只接受一个类型参数。
我有一个 AnyRef
对象,我已经在运行时恢复了它的 class。我知道对象的 class 是 Super
的子 class 并且我想调用 doSomething
.
有没有办法以对象的class为参数调用doSomething
?我可以向编译器断言我在运行时恢复的 class 是 Super
的子 class 吗?
如果我的对象出于某种原因不是 Super
的子class,我不担心运行时的这种失败。
我希望这应该有效:
val obj: AnyRef = ...
val tag = ClassTag(obj.getClass).asInstanceOf[ClassTag[_ <: Super]]
doSomething(tag)
如果没有,你可以更骗编译器:
val tag = ClassTag(obj.getClass).asInstanceOf[ClassTag[Super]]
(因为转换实际上是空操作,即使编译器现在认为 tag
是 ClassTag[Super]
并将推断 Super
类型参数为 doSomething
, 它会在运行时得到正确的 class。)
我正在尝试调用一个方法:
def doSomething[A <: Super : ClassTag] : B = { ... }
该方法只接受一个类型参数。
我有一个 AnyRef
对象,我已经在运行时恢复了它的 class。我知道对象的 class 是 Super
的子 class 并且我想调用 doSomething
.
有没有办法以对象的class为参数调用doSomething
?我可以向编译器断言我在运行时恢复的 class 是 Super
的子 class 吗?
如果我的对象出于某种原因不是 Super
的子class,我不担心运行时的这种失败。
我希望这应该有效:
val obj: AnyRef = ...
val tag = ClassTag(obj.getClass).asInstanceOf[ClassTag[_ <: Super]]
doSomething(tag)
如果没有,你可以更骗编译器:
val tag = ClassTag(obj.getClass).asInstanceOf[ClassTag[Super]]
(因为转换实际上是空操作,即使编译器现在认为 tag
是 ClassTag[Super]
并将推断 Super
类型参数为 doSomething
, 它会在运行时得到正确的 class。)