我试图实现一个接受泛型参数的函数定义,只要它扩展了另一个特定的泛型类型。简言之参数A必须扩展参数B,其中A和B都是泛型的。
下面是我的示例
abstract class Endpoint<T>(
) {
private val myList: MutableMap<Class<T>, MutableList<((T) -> Unit)>> = mutableMapOf()
fun addToList(
index: Class<E>, <-- E extends T
value: (E) -> Unit
) {
myList[index] = (myList[index] ?: mutableListOf()).apply { add(value) }
}
}
用法示例如下
一些封闭的班级
sealed class MainSealedClass {
data class ChildClass(val someParam: Int): MainSealedClass()
}
和函数调用
anEndpointInstance.addToList(MainSealedClass.ChildClass::class.java, "some value")
我不想在抽象类声明中定义E,因为T已经在那里定义了。
我也试着做了以下几点:
将myList定义为接受扩展T的键
val myList: MutableMap<Class<in T>, MutableList<String>>
将E定义为T类型(无法找到如何指定它在函数中扩展T
fun <E:T> addToList(
index: Class<E>,
value: (E) -> Unit
) {
myList[index] = (myList[index] ?: mutableListOf()).apply { add(value) }
}
fun addToList(
index: Class<in T>,
value: (E) -> Unit
) {
myList[index] = (myList[index] ?: mutableListOf()).apply { add(value) }
}
fun <E> addToList(
index: Class<E>,
value: (E) -> Unit
) where E : T {
myList[index] = (myList[index] ?: mutableListOf()).apply { add(value) }
}
但它从来都不起作用。有没有办法做到这一点?我在StackOverflow中找不到任何对这种情况有答案的东西。
你的方差倒过来了。如果你想让你的地图接受T的子类型,那么它必须是
您声明函数的第一种方式是正确的。
abstract class Endpoint<T>(
) {
private val myList: MutableMap<Class<out T>, MutableList<String>> = mutableMapOf()
fun <E : T> addToList(
index: Class<E>,
value: String
) {
myList.getOrPut(index, ::mutableListOf).add(value)
}
}
问题内容: 我想制作这种形式的通用类: 问题是,我希望T可以是整数或Long,但不能接受Double。因此,仅有的两个可接受的声明将是: 有什么办法吗? 问题答案: 答案是不。至少没有办法使用泛型类型做到这一点。我建议结合使用泛型和工厂方法来执行您想要的操作。 这样可以确保只能创建和实例。尽管您仍然可以声明类型的变量,但它必须为null。
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或
考虑一个具有的API,如下所示: 很简单,只有页面大小和跳过计数属性。 此外,现在我还有一些类,它们也包含但未分页。 在我的测试中,我希望他们都能实现一个接口,这样我就可以用一些更基本的测试来生成一个通用的基本测试类。为此,我添加了我认为会起作用的内容: 我将PagedResults更改为: 错误 但现在编译器抱怨PagedResultBase继承的所有地方的使用情况(?)从。 但是,如果我将接口
我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类
泛型类型 除了反省函数, Swift允许你定义自己的泛型类型. 它们是可以用于任意类型的自定义类、结构体、枚举, 和Array、Dictionary方式类型. 1. 定义泛型类型 定义一个普通的结构体 struct IntStack { var items = [Int]() mutating func push(_ item: Int) { items.appen
我有大约40个API,它们具有类似的基本响应结构,如下所示: 因此,我有一个基本响应类,采用T类型的泛型,如下所示: 因此,对于API A,它返回类型为的对象及其自己的字段,我将返回响应作为控制器中的API响应: 在控制器中:响应数据=新响应();ResponseEntity response=新的ResponseEntity 在swagger中有没有一种方法可以递归地指定响应对象的模型?例如,我