相关疑难解决方法(0)

使用新的Scala反射API获取协同对象实例

使用Scala的新反射API,是否可以获得对类的伴随对象的引用?我正在考虑以下几点:

trait Base {
  def companion: MetaBase = someReflectionMagic(this).asInstanceOf[MetaBase]
}

trait MetaBase {
  // stuff
}

// ---

class Foo extends Base

object Foo extends MetaBase

assert(new Foo.companion == Foo)
Run Code Online (Sandbox Code Playgroud)

reflection scala

27
推荐指数
2
解决办法
1万
查看次数

如何使用scala反射API来获取所有包含的类

我有这样的课:

trait ThirdParty { def invoke = println("right") }

trait WeatherIcon { def invoke = println("wrong") }

class MyClass {

    object objA extends ThirdParty

    object objB extends WeatherIcon

}
Run Code Online (Sandbox Code Playgroud)

如何使用Scala反射API迭代包含的对象并调用方法(如果它是ThirdParty类的实例)?

reflection scala

11
推荐指数
1
解决办法
4263
查看次数

使用Scala反射API获取内部模块的伴随对象实例

使用新的Scala反射API(来自https://gist.github.com/xeno-by/4985929的代码)实现了Get companion对象实例中提到的代码.

object Reflection {
    def getCompanionObject(caseclassinstance:Product):Any = {
        import scala.reflect.runtime.{currentMirror => cm}
        val classSymbol = cm.classSymbol(caseclassinstance.getClass)
        val moduleSymbol = classSymbol.companionSymbol.asModule
        val moduleMirror = cm.reflectModule(moduleSymbol)
        moduleMirror.instance
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于任何标准类的案例类.不幸的是在项目的某些类中我得到一个异常:scala.ScalaReflectionException: object Tensor is an inner module, use reflectModule on an InstanceMirror to obtain its ModuleMirror异常非常清楚,所以我尝试按如下方式更改代码:

object Reflection {
    def getCompanionObject(caseclassinstance:Product):Any = {
        import scala.reflect.runtime.{currentMirror => cm}
        val classSymbol = cm.classSymbol(caseclassinstance.getClass)
        val moduleSymbol = classSymbol.companionSymbol.asModule
        val instanceMirror = cm.reflect(caseclassinstance)
        val moduleMirror = instanceMirror.reflectModule(moduleSymbol)
        moduleMirror.instance …
Run Code Online (Sandbox Code Playgroud)

reflection scala

7
推荐指数
1
解决办法
1826
查看次数

标签 统计

reflection ×3

scala ×3