如何访问generics类参数中的属性/方法

来自C#的Kotlin新手。 我想创建一个类,通过generics需要一个可互换的类对象。 在类中,我想访问类中的属性值和调用方法。 我认为这必须通过某种反思机制。 挖掘Kotlin引用我一直在尝试应用建议到我的代码,但是我得到一些神秘的错误。 任何帮助表示赞赏。 Error:(35, 20) Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: @InlineOnly public operator inline fun Lazy.getValue(thisRef: Any?, property: KProperty): T1? defined in kotlin @InlineOnly public operator inline fun Map.getValue(thisRef: Any?, property: KProperty): T1? defined in kotlin.collections @SinceKotlin public fun Map<Class, T1?>.getValue(key: Class): […]

在Spring Boot 2中解开Thymeleaf中的Kotlin HashMap

我有一个Kotlin函数,它创建一个带有hashmap的模型,如下所示 @GetMapping(“/”) fun index(model: Model): Mono { model.addAttribute(“images”, imageService.findAllImages()?.flatMap { image -> Mono.just(image) .zipWith(repository.findByImageId(image?.id!!).collectList()) .map({ imageAndComments: Tuple2<Image?, MutableList> -> hashMapOf( “id” to imageAndComments.t1?.id, “name” to imageAndComments.t1?.name, “comments” to imageAndComments.t2) }).log(“findAllImages”) }) model.addAttribute(“extra”, “DevTools can also detech code changes.”) return Mono.just(“index”) } Image.kt package learningspringboot.images import org.springframework.data.annotation.Id data class Image(@Id var id: String? = null, var […]

Android Studio 3.0 – 无法find方法’com.android.build.gradle.internal.variant.BaseVariantData.getOutputs()Ljava / util / List’

试图用Android Studio 3.0 Canary 1启动一个新的Kotlin项目显示这个错误。 全迹: 错误:无法find方法’com.android.build.gradle.internal.variant.BaseVariantData.getOutputs()Ljava / util / List;’。 这种意外错误的可能原因包括: Gradle的依赖关系缓存可能已损坏(有时发生在网络连接超时之后)。重新下载依赖项并同步项目(需要网络) Gradle构建过程(守护进程)的状态可能已损坏。 停止所有的Gradle守护进程可能会解决这个问题。 停止Gradle构建过程(需要重新启动) 您的项目可能使用与项目中的其他插件或项目请求的Gradle版本不兼容的第三方插件。 在损坏的Gradle进程的情况下,您也可以尝试关闭IDE,然后杀死所有的Java进程。 我已经尝试了前两个选项,第三方插件是默认的。 gradle-wrapper.properties #Thu May 18 08:36:52 BST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip 的build.gradle // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = ‘1.1.2-3’ repositories { maven { […]

不能将tornadofx应用程序编译到独立的jar文件中

对于Kotlin和JVM来说,我是个新手,我将把我的helloworld kotlin应用程序编译成一个独立的jar文件,这个jar文件可以在客户端机器上运行(它有一个JRE) 我确信我正在使用包含JavaFx的Java 1.8,我也在pom.xml中有下列依赖项 no.tornado tornadofx 1.7.14 ${project.basedir}/src kotlin-maven-plugin org.jetbrains.kotlin ${kotlin.version} compile compile test-compile test-compile org.apache.maven.plugins maven-assembly-plugin 2.6 make-assembly package single main.kt jar-with-dependencies 运行以下 kotlinc /home/denis/prg/java/kot/src/main.kt -include-runtime -d main.jar -jvm-target 1.8给出 src/main.kt:3:8: error: unresolved reference: tornadofx 此外,运行maven clean package产生一个SNAPSHOT jar,但我不能运行它?Java给出Could not find or load main class main.kt 我怎样才能使一些可用的东西?

目录路径列表中的节点层次结构

嗨我想建立一个基于目录结构的节点层次结构: /first/ /first/second /first/third /first/third/forth /first/third/fifth /first/sixth /first/sixth/seventh /first/eighth /first/ninth 我试图得到一个类似于此的节点层次结构: first second third forth fifth sixth seventh eighth ninth 我为此使用Kotlin,对Java和Kotlin我还是比较新的,所以对我很感兴趣。 注意:我正在使用FileTreeWalk获取目录 fun getDirs(directoryName: String): MutableList { val ret = mutableListOf() File(directoryName).walk().forEach { if (it.isDirectory) { ret.add(it.toString()) } } return ret } 现在我所拥有的就是这样(生成一个扁平的层次结构): private fun nodesFromPathList(dirPaths: MutableList) : Tree.Node { val ret = Tree.Node(“root”) for […]

Kotlin将来如何设计一个复杂的课程来增加课程的扩展性?

我是Kotlin的初学者,我使用代码A来定义一个复杂的类MDetail ,并使用代码B创建一个对象aMDetail1 ,它可以工作。 但是数据结构太难扩展了,如果像Code C那样在MDetail包含ScreenDef这样的新数据类,那么所有的旧代码都必须重写。 对于包含一些类的复杂类是否有很好的数据结构? 我希望今后的数据建设可以轻松扩展! 代码A data class BluetoothDef(val Status:Boolean=false) data class WiFiDef(val Name:String, val Status:Boolean=false) data class MDetail ( val _id: Long, val bluetooth: BluetoothDef, val wiFi:WiFiDef ) 代码B var mBluetoothDef1= BluetoothDef() var mWiFiDef1= WiFiHelper(this).getWiFiDefFromSystem() var aMDetail1= MDetail(7L,mBluetoothDef1,mWiFiDef1) 代码C data class BluetoothDef(val Status:Boolean=false) data class WiFiDef(val Name:String, val Status:Boolean=false) data class ScreenDef(val […]

Gradle错误 – 当我在单个Kotlin文件或特定测试函数上运行unit testing时

在Android Studio ,当我只运行Kotlinunit testing文件或特定测试函数时, Gradde Build失败,但是当我运行文件的父文件夹时,一切正常。 错误: Gradle : failed to create directory d:\…app\build\generated\source\r\debug\…’ 如果我已经启用Kotlin创建一个新的项目,我可以运行测试! 谢谢

Kotlin Higher Order Function以可变数量的参数作为parameter passing一个函数

在我的应用程序中,我需要使用特定的框架来执行网络调用。 由于每个网络调用需要在单独的线程上执行,我想有一个函数启动新的线程执行调用并返回一个对象。 为此,我尝试使用HigherOrderFunctions,但直到现在我还没有发现如何将函数声明为一个参数,这个参数带有可变数量的参数。 给你一个想法,我想有这样的事情: fun Client.performNetworkCall(calledFunction:(vararg Object)->Object):Object{ Thread(Runnable { calledFunction }).start() //return function results } 但似乎不可能宣布这样的function。 Kotlin有可能吗? 我想避免在我需要执行网络调用时在每个代码中创建新线程。 所以我可以写这样的东西 client.performNetworkCall{ bean.createNewUser(User(“”,””,”Gosia”,”gosiak@gmail.com”,”pass”))} bean是我的界面的对象,它有一个函数createNewUser。 函数createNewUser在服务器上实现,执行后会返回一些结果。 如果我想要做的是不可能使用更高阶的函数,你能给我一个提示,我还能做些什么,像我上面描述的?

为什么Kotlin的字符串插值在Java中串联字符串?

所以,基本上我想知道Kotlin的字符串插值如何看Java(反编译的字节码)。 起初我以为它会使用StringBuffer(或StringBuilder)或String.format(),但它似乎是串联。 这样做真的是最佳吗?字符串池呢? 这是我的Kotlin代码: fun main(args: Array) { val age : Int = 24 var mySuperString : String = “Dato is ${age} years old!” println(mySuperString) } 这里是我反编译的Java代码forms* .class文件: import java.io.PrintStream; import kotlin.Metadata; import kotlin.jvm.internal.Intrinsics; import org.jetbrains.annotations.NotNull; @Metadata(mv={1, 1, 6}, bv={1, 0, 1}, k=2, d1={“\000\024\n\000\n\002\020\002\n\000\n\002\020\021\n\002\020\016\n\002\b\002\032\031\020\000\032\0020\0012\f\020\002\032\b\022\004\022\0020\0040\003 \006\002\020\005 \006\006”}, d2={“main”, “”, “args”, “”, “”, “([Ljava/lang/String;)V”, “KotlinProject”}) public final […]

(已解决)Bugsnag w / Spring(Kotlin / Java):没有收到任何错误报告

自从昨天以来,我一直试图在一个新的项目上安装Bugsnag,但我似乎无法做到。 这个项目是用Kotlin编写的,我使用的是Spring Boot框架。 我遵循所有的集成指南的步骤(得到我的Bugsnag豆,与正确的API键,配置exception处理程序等)。 所以,我一直在调试我的应用程序,处理程序被调用,因为它应该,调用bugsnag.notify也是有效的,我看到它进入交付步骤,并通过它成功,但仍然没有错误报告显示在Bugsnag网络应用程序。 我不知道如何调试它比我已经有了。 以下是一些相关的代码示例: // Application.kt @Configuration open class ApplicationConfiguration(private val config: Config) { @Bean open fun bugsnag(): Bugsnag = Bugsnag(config.bugsnag.key).apply { setReleaseStage(config.envName) } } 这是我的处理程序 // BugsnagHandlerExceptionResolver.kt @Component class BugsnagHandlerExceptionResolver(private val bugsnag: Bugsnag) : HandlerExceptionResolver, Ordered { override fun getOrder(): Int = 0 override fun resolveException(request: HttpServletRequest, response: HttpServletResponse, handler: Any?, […]