Tag: 仿制药

如何在kotlin中将通用映射指定为超类

我想知道如何在这个特定的情况下正确使用in / out方差修饰符。 我有一个具有特定的实现types的genericsMap ,我想分配给一个更通用的types的variables: var generalMap: Map<SimpleExpression, Any> = emptyMap() var specificMap: Map = makeSomeMap() generalMap = specificMap // this assignment won’t compile 🙁 而且, StringExpression扩展了SimpleExpression 。 我试过在generalMap定义中使用差异修饰符来修改一些不同的方法: var generalMap: Map<out SimpleExpression, out Any?> = emptyMap() …但不幸的是跑到相同的编译器错误。

在Kotlin中抽象容器工具的generics进/出?

我正在创建一个抽象工具类,在另一组外部类(不受我控制)上运行。 外部类在概念上在界面的某些点上是相似的,但是对于访问它们的类似属性具有不同的语法。 他们也有不同的语法来应用工具的操作结果。 我用@hotkey根据这个答案创建了一个带有内部类的数据类。 这是generics的问题:外部类基本上是元素的容器。 每个类的容器types是不同的。 某些容器具有固定的元素types,而其他容器具有通用元素types。 我很难将这个generics概念in vs, out ,协方差与这个模型的逆变。 下面是一个简单的例子,使用CharSequence和List的切片,就类似于这个generics, // *** DOES NOT COMPILE *** data class Slicer(val obj: C, val beg: Int, val end: Int) { // C is container type; E is element type // but unsure how to apply in/out properly inner abstract class SObj{ abstract val len: Int […]

在Kotlin中与嵌套类共享genericstypes

我正在尝试用通用types的节点来做一个简单的Dijkstra探路者。 为此我有我的探路者类和嵌套的数据类来帮助。 它看起来像这样 class Dijkstra( val graph: Graph, val from: Node, val to: Node) { private var nodesDistances = mutableMapOf<Node, DijkstraDistanceHelper>() init { graph.getNodeList().forEach { nodesDistances[it] = DijkstraDistanceHelper(it, null, null) } val currentNode = from while (currentNode != to) { currentNode.getNeighborhood()?.forEach { if (it.destination != currentNode) { //it.value type is U and properly recognized as […]

在一种情况下,将Kotlingenerics约束为非null

我有一个genericstypes( T: Any? ),我需要约束在一种情况下永远不会为null : class Repository { // T may be a non-null or nullable type. fun getFromFoo(): T {} fun getFromBar(): T {} // This is never null. Can I mark it as so? } val repository = Repository() val fromFoo: String = repository.getFromFoo() // Returns a non-null String. val fromBar: String = […]

你可以在Kotlin有一个通用的主要构造函数吗?

这将工作: class Generic(thingy: R) { val x = thingy.getX() } 但参数R实际上不应该是类签名的一部分。 只有在施工时才有意义。 通用方法的types参数与类的types参数无关。 但是,这不起作用: class Generic(thingy: R) { val x = thingy.getX() } 这也不是: class Generic(thingy: R) { val x = thingy.getX() } 我没有在文档中find答案。

Kotlin中的关键字关键字是如何工作的?

我试图理解关键字关键字的目的,显然它允许我们对generics进行思考 。 但是,当我离开它时,它工作得很好。 任何人都在意解释什么时候会产生实际的差异 ?

Kotlin – 我如何从我的方法返回不同的types?

我有这个方法。 private fun getOffer(offers: OfferRepresentation, type: OfferType): ???? { return when (type) { OfferType.ADDON -> offers.addon OfferType.SALE -> offers.sale OfferType.PLAN -> offers.plan OfferType.CUSTOMPLAN -> offers.customPlan } 我怎样才能改变这种方法来返回正确的types?

Kotlin,Number的通用操作

我有以下 abstract interface Vec2t { var x: T var y: T } data class Vec2(override var x: Float, override var y: Float) : Vec2t 我有一个界面,我定义了几个操作,例如: interface fun_vector2_common { fun abs(res: Vec2, a: Vec2): Vec2 { res.x = glm.abs(ax) res.y = glm.abs(ay) return res } } 使用generics可以实现,比如abs吗? interface fun_vector2_common { fun abs(res: Vec2t, a: Vec2t): Vec2t […]

在Kotlin中使用延迟初始化和通用工厂方法进行推理

我有一个工厂方法,产生一些列表: inline fun getObject(fileName: String): List 工厂方法应该用于这样的延迟初始化: val points: List by lazy { ObjectFactory.getObject(pointsFileName) } 现在,Kotlin编译器显然没有足够的lambda内的types信息和抱怨: Type inference failed: Not enough information to infer parameter T in inline fun getObject(fileName: String): List Please specify it explicitly. 编译器不考虑延迟初始化的结果将被分配的types。 我可以通过在本地提供types来解决这个问题,但这并不美观: val points by lazy { val pointsToCommunicateType: List = ObjectFactory.getObject(pointsFileName) pointsToCommunicateType } 什么是正确的方法来做到这一点?

kotlin:通用于不同的types

我需要这样的线性函数: class Linear(val a : Double, val b : Double) { fun eval(in : Double) { return a*in + b } } 然后,我需要为矢量相同的东西。 class Vector3d(val a1 : Double, val a2 : Double, val a3 : Double) { // use operator overloading https://kotlinlang.org/docs/reference/operator-overloading.html to make +, -, /, *, etc. possible for vectors } class Linear(val […]