SCK*_*SCK 0 instantiation kotlin
我有一个课程列表:
val availableClasses = listOf<Whatever>(
classA(),
classB(),
classC()
)
Run Code Online (Sandbox Code Playgroud)
我使用以下方法从该列表中随机选择一个项目:
private var selection: Whatever = availableClasses.random()
Run Code Online (Sandbox Code Playgroud)
不幸的是,我认为这种方法是在加载列表时实例化列表中包含的每个类。
我希望通过用字符串列表替换类列表来解决这个问题:
val availableClasses = listOf<String>(
"classA",
"classB",
"classC"
)
Run Code Online (Sandbox Code Playgroud)
然后一旦我选择了一个字符串,就只实例化那个字符串;就像是:
private var selection: String = availableClasses.random()
// pseudo-code
val chosenClass = selection.toClass()
Run Code Online (Sandbox Code Playgroud)
我可以使用带有getattr函数的字符串来引用 Python 中的类。
在 Kotlin 中有这样的事情吗?
我也愿意接受更好的方法来解决这个问题。
通过字符串名称实例化类比使用构造函数更容易出错,因为它依赖于使用完全限定的、拼写正确的名称,以及具有特定构造函数(空或具有特定参数)的类。所以它可以完成,但是当有更安全的方法时应该避免(如果你做错了编译器会给你一个错误的方式,而不是只有在你运行编译程序后才会出现错误) .
如果我理解正确,您需要一个只能随机实例化一次的类列表。一种方法是制作一个类构造函数列表。
val classConstructors = listOf<() -> Any>(
::ClassA,
::ClassB,
::ClassC
)
val randomInstantiatedClass = classConstructors.random()()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |