【问题标题】:kotlin I want to get a random class that inherits certain interfacekotlin 我想得到一个继承某些接口的随机类
【发布时间】:2020-07-24 02:42:09
【问题描述】:

假设我有一个单一的接口。 interface example 我有类A、B、C 继承example。(我会做更多)我需要一个随机继承example 的类。所以我想将A、B、C的信息保存为一个列表。但是他们有需要用户输入的构造函数。所以我需要保存类但实例。我怎样才能做到这一点?如果有更好的方法来解决这个问题(不将类保存为列表),请给我一个建议。

【问题讨论】:

  • 所有类在构造函数中使用相同类型和数量的参数?
  • @DiegoMarin 是的,他们的构造函数是(并且将是)都一样。
  • 你不能用.javaClass存储实例和访问类型信息吗?
  • @CommanderTvis 有一个主构造函数,它的参数需要用户输入,所以我不能制作和存储实例。但我终于找到了解决方法。我决定使用kclass<> 存储A、B、C,但我无法从kclass<>(带参数)创建实例。它不断出错。你知道如何使用参数从kclass<> 创建实例吗?如果你知道,请给我一个建议。
  • @kdm1jkm val klass = something::class; klass.primaryConstructor!!.call(args)

标签: class kotlin inheritance interface


【解决方案1】:

这是你如何做到这一点的一个例子:

import kotlin.reflect.full.primaryConstructor

interface MyInterface {
    fun doSomething()
}

class A(param1: Int, param2: Int) : MyInterface {
    override fun doSomething() {
        TODO("Not yet implemented")
    }
}

class B(param1: Int, param2: Int) : MyInterface {
    override fun doSomething() {
        TODO("Not yet implemented")
    }
}

fun main() {
    val list = listOf(A::class.primaryConstructor, B::class.primaryConstructor)
    val instance = list.random()?.call(1, 2)
    instance?.doSomething()
}

但我正在考虑您将对列表中的类进行硬编码。如果你想动态制作,看看这个Find Java classes implementing an interface

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 2020-10-17
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多