1

我想删除以下导入:

import my.package.version.class1

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

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

当我这样做时,它会像这样进行硬编码

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

但我需要它是一个字符串类型,所以我可以每次都附加版本。

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

你能帮忙吗?

4

2 回答 2

3

您将不得不恢复到java.lang.Class.forName获取课程的方法。但请注意,您将得到 aClass<?>而不是 a 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
于 2017-02-20T09:46:27.770 回答
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")
于 2017-02-20T09:49:01.857 回答