任何人都可以解释为什么通用参数在Supplierlambda 而不是在 lambda中丢失Callable?
我创建了捕获泛型类型和实例化它的辅助函数的接口
abstract class TypeRef<T> protected constructor() {
val type: Type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
override fun toString(): String {
return type.toString()
}
}
inline fun <reified T> getTypeRef(): TypeRef<T> {
return object: TypeRef<T>() {};
}
但是测试它会导致不同的结果,具体取决于它的调用位置
inline fun <reified T> testTypeRef(): TypeRef<T> {
val ref0 = getTypeRef<T>()
println("In root $ref0")
Callable {
val ref1 = getTypeRef<T>()
println("In callable $ref1")
}.call()
Supplier {
val ref2 = getTypeRef<T>()
println("In supplier $ref2")
""
}.get()
return ref0
}
生产
In root java.util.List<? extends java.util.concurrent.atomic.AtomicReference<java.lang.String>>
In callable java.util.List<? extends java.util.concurrent.atomic.AtomicReference<java.lang.String>>
In supplier T
我错过了什么?