我想删除以下导入:
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");
你能帮忙吗?
答案 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")