【问题标题】:scala - get class from a stringscala - 从字符串中获取类
【发布时间】:2022-01-20 21:45:36
【问题描述】:

在 Scala 中,我使用了一个需要类参数的 Java 库。示例:

def service: OAuthService  = new ServiceBuilder()
                                    .provider(classOf[RunApi])

RunApi 是 Java 类。

不过,我希望能够将各种类传递给提供者。我有一个字符串格式的列表。

例如,如果我知道字符串格式的 RunApi;例如“com.me.RunApi”,如何构造与上面代码等价的代码?

【问题讨论】:

    标签: scala


    【解决方案1】:

    使用forName方法:

    scala> Class.forName("scala.collection.mutable.ArrayBuffer")
    res0: java.lang.Class[_] = class scala.collection.mutable.ArrayBuffer
    

    【讨论】:

    • 谢谢,我以为它会起作用,但是:[error] (org.scribe.builder.api.Api)org.scribe.builder.ServiceBuilder [error] (java.lang .Class[_ <: org.scribe.builder.api.api method service .provider>
    • 只需将其转换为所需的类型:Class.forName("com.me.RunApi").asInstanceOf[Class[_ &lt;: org.scribe.builder.api.Api]]
    • 谢谢。我尝试了 Class.forName("com.me.RunApi").asInstanceOf(Api),但是:java.lang.Class 不能转换为 org.scribe.builder.api.Api。 RunApi 扩展了一个实现 Api 接口的抽象父类。
    【解决方案2】:

    val yourInstance: ClassOrTrait = Class.forName("Package.ClassName").newInstance().asInstanceOf[ClassOrTrait]

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2014-06-21
      • 1970-01-01
      • 2016-03-05
      • 2011-01-25
      • 1970-01-01
      • 2013-07-01
      • 2012-02-03
      • 1970-01-01
      相关资源
      最近更新 更多