将类对象传递给函数(Kotlin)
抱歉,如果这是个愚蠢的问题,但我可以解决 我有两节课将类对象传递给函数(Kotlin),kotlin,Kotlin,抱歉,如果这是个愚蠢的问题,但我可以解决 我有两节课 class A( val id: Int ) class B( val id: Int, val className: String ) 现在我想把一个对象传递给函数。我想做“uniwersal”函数。现在我必须做2个函数 参数类型为A fun printClassFields(classObject: A){ } 第二个参数是B fun printClassFieldsB(classObject: B){
class A(
val id: Int
)
class B(
val id: Int,
val className: String
)
现在我想把一个对象传递给函数。我想做“uniwersal”函数。现在我必须做2个函数
参数类型为A
fun printClassFields(classObject: A){
}
第二个参数是B
fun printClassFieldsB(classObject: B){
}
是否可以使一个函数同时接受两个类 不太清楚如何处理函数中的类,但这里有一些选项 您可以对所有公共字段使用
界面
:
interface Common {
val id: Int
}
class A(
override val id: Int
) : Common
class B(
override val id: Int,
val className: String
) : Common
fun print(obj: Common) {
print(obj.id)
}
如果您知道所有类型,另一种解决方案是对函数进行硬编码,如下所示:
fun print(obj: Any) {
when (obj) {
is A -> { /* handle class A */ }
is B -> { /* handle class B */ }
}
}
在这里,您可以从Kotlin获得智能Cast
,并可以访问每个类的字段。但是,您打开函数以调用任何可能不需要的输入
另一个选项是使用
密封类
,在该类中可以获得智能转换
,但限制参数类型
sealed class SealedSuper(val id: Int)
class A(id: Int) : SealedSuper(id)
class B(id: Int, val className: String) : SealedSuper(id)
fun print(obj: SealedSuper) {
when (obj) {
is A -> {
print(obj.id)
}
is B -> {
print(obj.id)
print(obj.className)
}
}
}
让B延伸A?