如何在scala中调整字符串以更正classOf的输入类型?

时间:2017-02-20 09:30:25

标签: scala reflection package scala-reflect

我想删除以下导入:

import my.package.version.class1

原因是我想将version作为参数传递,因此我可以选择以下选项:

my.package.version1.class1
my.package.version2.class1
my.package.version3.class1

当我这样做的时候硬编码就好了吗

classOf[my.package.version1.class1].getPackage

但是我需要它是一个String类型,所以我每次都可以追加版本。

val hh = "my.package."+versionParamater+".class1"



 classOf[hh].getPackage //THIS WONT WORK error: identifier expected but string literal found.

我也试过这样做,它也没有用:

 val pkg = Package.getPackage(" my.package.version1.class1");
你能帮忙吗?

2 个答案:

答案 0 :(得分:3)

您必须恢复java.lang.Class.forName方法才能掌握课程。但请注意,您将获得Class<?>而不是Class<class1>。例如:

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

你可以施展它,但是:

scala> res0.asInstanceOf[Class[String]]
res1: Class[String] = class java.lang.String

错误播放会导致ClassCastException

scala> res0.asInstanceOf[Class[Integer]]
res2: Class[Integer] = class java.lang.String

答案 1 :(得分:1)

您可以使用java.lang.Class.forName(fullClassPackage)

示例,

  val versionParamater = "version1"
  val fullPackage = "my.package."+versionParamater+".class1"
  val versionedClass = Class.forName(fullPackage)
  assert(versionedClass.getSimpleName == "class1")
  assert(versionedClass.getPackage.getName == "my.package.version1")