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

How to adjust string to correct input type of classOf in scala?

我想删除以下导入:

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");

你能帮忙吗?

您将不得不恢复到 java.lang.Class.forName 方法来获取 class。但请注意,您将得到 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

A mis-cast 不会 导致 ClassCastException:

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

您可以使用 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")