kotlin 获取泛型class
时间: 2023-07-05 16:08:00 浏览: 67
可以使用 Kotlin 的反射 API 来获取泛型类,具体的代码实现如下:
```kotlin
import java.lang.reflect.ParameterizedType
class MyClass<T> {
private val type: Class<T>
init {
val superClass = javaClass.genericSuperclass as ParameterizedType
type = superClass.actualTypeArguments[0] as Class<T>
}
fun getType(): Class<T> {
return type
}
}
// 使用示例
class MySubClass : MyClass<String>()
fun main() {
val myClass = MySubClass()
println(myClass.getType()) // 输出:class java.lang.String
}
```
在上面的示例代码中,我们定义了一个泛型类 `MyClass`,并且在初始化代码块中使用了反射 API 获取了泛型类的类型,然后通过 `getType()` 方法返回了泛型类的类型。在 `MySubClass` 中我们继承了 `MyClass` 并将泛型类型指定为 `String`,最后在 `main()` 函数中打印出了泛型类的类型。
相关问题
kotlin怎么获取泛型类型
在 Kotlin 中,可以使用 reified 关键字获取泛型类型。reified 关键字可以用于内联函数中,使得我们可以在函数体内获取泛型类型的具体类型信息。
下面是一个示例代码:
```kotlin
inline fun <reified T> getType(): Class<T> {
return T::class.java
}
```
在上面的代码中,我们定义了一个内联函数 `getType`,使用 reified 关键字修饰泛型参数 `T`。在函数体内部,我们可以使用 `T::class.java` 获取泛型类型的具体类型信息。
例如,如果我们调用 `getType<Int>()`,则会返回 `java.lang.Integer` 类型的 Class 对象。
注意,使用 reified 关键字获取泛型类型的前提是,泛型参数必须在函数前面使用 inline 关键字修饰。这是因为 reified 关键字只能用于内联函数中。
kotlin t class.java_Kotlin 泛型
Kotlin 中的泛型是通过在类、函数或接口声明中使用尖括号语法来实现的。例如,一个简单的泛型类可以这样声明:
```
class Box<T>(t: T) {
var value = t
}
```
这个类的类型参数是 `T`,可以在类的各种属性和方法中使用。在这个例子中,我们在 `Box` 类的构造函数中使用了类型参数 `T`,并将其保存在一个名为 `value` 的属性中。
创建一个 `Box` 对象时,需要指定类型参数:
```
val box: Box<Int> = Box(1)
```
在这个例子中,我们创建了一个 `Box` 对象,类型参数是 `Int`,并将值 `1` 传递给构造函数。
Kotlin 中的泛型支持协变和逆变,这使得在使用泛型时更加灵活。例如,我们可以将一个类型参数为 `List<Int>` 的对象赋给一个类型参数为 `List<Number>` 的变量:
```
val ints: List<Int> = listOf(1, 2, 3)
val nums: List<Number> = ints
```
在这个例子中,`ints` 是一个类型为 `List<Int>` 的对象,我们将其赋给了一个类型为 `List<Number>` 的变量 `nums`,这是因为 `List` 支持协变。