generics - kotlin 中具有内部类的泛型
问题描述
我有一个密封类,其中包含一些数据类,如下所示。有没有办法知道我在 T1.printclassname() 中使用的是哪个类(D1、D2、D3)?
sealed class A {
data class D1 { }
data class D2 { }
data class D3 { }
}
class T1 {
fun <E : A> printclassname(val c: E) {
}
}
并尝试与内部类相同
internal class B {
inner class X1 { }
inner class X2 { }
inner class X3 { }
}
class T2 {
fun <E : B> printclassname(val c: E) {
if (c is B.X1){
// some op.
}
}
}
printclassname() 应该接受 D1、D2、D3 的任何对象。并且 printclassname1 应该接受 X1、X2、X3 的任何对象
解决方案
你应该继承类A
和B
分别:
fun main(args: Array<String>) {
printClassName1(A.D1("some value"))
printClassName(B().X1())
}
sealed class A {
// Data classes must have at least one primary constructor parameter
data class D1(val p: String): A() { }
data class D2(val p: String): A() { }
data class D3(val p: String): A() { }
}
// make this class open to be able to inherit
open class B {
inner class X1: B() { }
inner class X2: B() { }
inner class X3: B() { }
}
fun <E : B> printClassName(c: E) {
println("name=${c::class.simpleName}")
}
fun <E : A> printClassName1(c: E) {
println("name=${c::class.simpleName}")
}
输出:
name=D1
name=X1
推荐阅读
- r - 是否有一个 R 函数可以像问题(即帮助)函数一样轻松显示文本
- docker - 在 docker 容器上运行 powershell 或 cmd
- haskell - 如何用 CallStack 抛出异常?
- jakarta-ee - 从每个请求中自动提取 URL 组件
- javascript - 带有 useEffect 的 ReactJS 不呈现每个状态
- excel - Excel VBA - 错误:未设置对象变量或块变量
- c++ - 这个递归函数是如何工作的?合并排序两个单链表
- python - 如何在不查看文件内容的情况下编写代码来确定 CSV 文件中的 EOL 字符是“\r”还是“\n”?
- visual-studio - 警告消息 - 缓慢构建
- java - AWT GUI - 同一个应用程序在不同的 PC 屏幕尺寸上显示大量不同的帧尺寸