在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 […]

Spring引导+ kotlin runApplication (* args)无法启动

import org.springframework.boot.runApplication import org.springframework.boot.SpringApplication @SpringBootApplication open class MyApplication fun main(args: Array) { runApplication(*args) } 错误:无法find或无法加载主类 为什么不能运行,但这可以吗? import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.SpringApplication @SpringBootApplication open class MyApplication fun main(args: Array) { SpringApplication.run(MyApplication::class.java, *args) }

Kotlin:如何从另一个课程访问领域?

package example class Apple { val APPLE_SIZE_KEY: String = “APPLE_SIZE_KEY” } 类: package example class Store { fun buy() { val SIZE = Apple.APPLE_SIZE_KEY } } 错误: ‘APPLE_SIZE_KEY’在’example.Apple’中有私人访问权限 但官方文档描述,如果我们不指定任何可见性修饰符,默认情况下使用public 。 我的第二个问题是: 为什么会出现上述错误?

Kotlin:如何获取字符串中“@”后面的字符?

我有一个字符串,是一个电子邮件。 我希望能够得到电子邮件的域名部分,不管字符串/电子邮件是什么。 基本上我想要获得@字符串后面的字符。 例如,对于testing@kotlin.com,我在kotlin.com部分之后。 val emailString =“hello@world.com”

在Kotlin中将地图的值加1

我正在写一个函数来遍历一个集合,并find其中最常见的项目。 这是我到目前为止获取的值,并添加它们出现在集合中的次数。 我将这个值作为一个关键字放入一个地图中,并把它的值显示为它的值。 fun mostCommon(input: Collection): Set { var newMap: MutableMap = HashMap() for (item in input) { if (newMap.containsKey(item)) { //TODO: add 1 to value if key is found }else { newMap.put(item, 1) } } return emptySet() } 如果密钥已经存在,我无法find将值1加1的方法。 我试过这样做: newMap[item] +=1 但是我得到一个关于plusAssign(1)不允许在Nullable接收器上的错误。

Kotlin – 为什么这个函数不适合尾递归?

下面的例子中的函数send()递归地调用它自己: internal inner class RouteSender( val features: List, val exchange: GrpcUniExchange ) { var result: AsyncResult? = null // Set in stub for recordRoute. fun send(numPoints: Int) { result?.let { // RPC completed or err’d before sending completed. // Sending further requests won’t error, but they will be thrown away. return } val index = […]

不可空的可变映射

Java: 1.8.0_102 Kotlin: 1.0.4 我试图创建一个地图,你可以做一些像map[“key”] += 5类似于JavaScript。 Kotlin已经在withDefault情况下解决了这个问题的一部分,但是map的get函数仍然返回一个可以为空的值,所以我开始用withDefault interface NonNullableMutableMap : MutableMap { override fun put(key: K, value: V): V override fun get(key: K): V } fun MutableMap.withoutNullValues(default: () -> V): NonNullableMutableMap { return NonNullableMapWrapper(this, default) } class NonNullableMapWrapper(val map: MutableMap, val default: () -> V) : NonNullableMutableMap { override fun put(key: K, value: V): […]

为什么我可以在Kotlin中省略函数调用?

在下面的例子中,我有2个函数,返回int。 在一种情况下,我有义务使用函数调用括号() ,在其他情况下,我被禁止使用它。 为什么以及如何控制? package kotlin.tests import java.util.ArrayList object MyObject { fun getValue(): Int { return 0 } } fun main() { val arrayList : ArrayList = ArrayList() println(arrayList.size()) // Expression ‘size’ of type ‘Int’ cannot be invoked as a function. The function ‘invoke()’ is not found println(MyObject.getValue) // Function invocation ‘getValue()’ expected }

在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 […]

Android网络库比较:OkHTTP,Retrofit和Volley

从iOS开发人员学习Android的两个部分的问题,工作在一个Android项目,将从JSON到图像到音频和video的流式下载的各种请求: 在iOS上,我广泛使用了AFNetworking项目。 有一个相当于Android的库吗? 我已经阅读了Square的OkHTTP和Retrofit ,以及Volley,但还没有与他们合作的经验。 我希望有人可以提供一些最佳用例的具体例子。 从我读到的,似乎OkHTTP是三个中最强大的,可以处理这个项目(上面提到)的要求。