如何调整字符串以更正 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")
我想删除以下导入:
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")