在Kotlin中带有不可变数据类的MyBatis

Kotlin有这个noarg插件来生成一个合成的noarg构造函数,而不需要帮助JPA(和像mybatis,hibernate这样的框架)实例化一个新的对象。 例如: data class User(val id: Int, val name: String) 鉴于这些属性被声明为val,即不可变,那么这些框架如何创建一个完全烘焙的对象与所有的值设置。 kotlin-noarg插件只是帮助实例化一个新的实例,但是属性(id和name)仍然是不可变的,因此一旦创建对象就不应该被允许改变。 要清楚的是,添加noarg插件后,情况会非常好。 问题是如何,鉴于属性是不变的。 这个问题也谈论这个解决方案,但不是如何部分。

将Java Parcel创建者代码转换为Kotlin

我试图将我的Parcel Creator代码从Java转换为Kotlin。 自动代码转换器在这个失败,我不知道如何解决它。 我正在转换的代码是: public static final Creator CREATOR = new Creator() { @Override public Save[] newArray(int size) { return new Save[size]; } @Override public Save createFromParcel(Parcel incoming) { return new Save(incoming); } }; 我结束了这个: val CREATOR: Parcelable.Creator = object : Parcelable.Creator { override fun newArray(size: Int): Array { return arrayOfNulls(size) } override fun createFromParcel(incoming: […]

在Kotlin的一行中写简单的循环

我正在尝试将下面的java方法改写成Kotlin函数: int C(int n) { if (n == 0) return 1; int result = 0; for (int i = 0; i < n; i++) result += C(i) * C(n – i – 1); return result; } 我怎样才能把它写在一行? 就像是: tailrec fun C(n: Int): Int = if (n == 0) 1 else { /* for loop? */}

在kotlin android项目中使用intellij-markdown

我想在一个android kotlin项目中使用intellij-markdown,但是它并不能保证java往返。 现在我正在寻找处理这个问题最痛苦的方法,因此在这里问 – 也许有人面临同样的问题。 目前所有的解决方案都不是很好,因为它们都与上游不同。 Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code. This is caused by library dependencies that have been compiled using Java 8 or above. If you are using the ‘java’ gradle plugin in a library submodule add targetCompatibility = ‘1.7’ sourceCompatibility = ‘1.7’ to that […]

用Kotlin建立一个Spring Boot项目

我开始了一个学习Kotlin的新项目,我在Spring Initializr中获得了一个项目模板,并创建了一个控制器来映射我的资源。 StudentController @RestController class StudentController { @GetMapping(“/students”) fun getStudent(): Student { return Student(“name”, “test”) } } 应用 @SpringBootApplication class DemoApplication fun main(args: Array) { SpringApplication.run(DemoApplication::class.java, *args) } application.properties debug=true 我运行项目,当我发送GET请求到本地主机:8080 /学生,我收到了404。 { “timestamp”: 1501961340149, “status”: 404, “error”: “Not Found”, “message”: “No message available”, “path”: “/students” } 我做错了什么?

Kotlin以Javascript文件编译

目前,我正在处理一个Kotlin / JS项目中的两个.kt文件。 这两个.kt文件编译成一个.js文件(在“out / production / myprojectfolder / myproject.js”这是默认目录)。 每个.kt文件代表两个单独的html页面。 我希望每个html页面都有自己的单个.js文件。 我的问题是,有没有办法将两个.kt文件编译成两个单独的.js文件?

运行Kotlin代码时,Android Studio会抛出java.lang.ClassNotFoundExceptionexception

我在KotlinMain.kt写了一个简单的kotlin代码: fun main(args: Array) { println(“Hello world from Kotlin.”) } 但是当我运行这个方法时,Android Studio会抛出 Exception in thread “main” java.lang.ClassNotFoundException: com.li.sample.KotlinMainKt at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:107) 但是当我把这个代码写入一个Java文件时,它工作正常。 如何解决这个问题呢 ?

Kotlin – 高阶函数和types不匹配

我刚开始学习kotlin,并正在努力理解高阶函数如何确定types,我经常看到这种错误 错误:types不匹配:推断的types是KFunction2但(字符串) – >单位是预期的 上述错误是由以下原因造成的 class MyClass(private val valueChangeListener: MyValueChangeListener, public val storage: MyStorage): MySuperClass { fun saveValue(potentialValue: String) { super.processValue(potentialValue, MyClass::save) } fun save(value: String){ storage.storeValue(value) valueChangeListener.onValueChanged(value) } } 但是,如果我使用Lambda全部解决 class MyClass(private val valueChangeListener: MyValueChangeListener, public val storage: MyStorage): MySuperClass { fun saveValue(potentialValue: String) { super.processValue(potentialValue, super.processValue(potentialValue, { value: String -> save(value) }) } […]

AES加密。 PHP和Kotlin \ Java的区别

有一个网站使用CryptoJSAES库来编码和解码请求。 https://github.com/blocktrail/cryptojs-aes-php/blob/master/src/CryptoJSAES.php abstract class CryptoJSAES { /** * @param $data * @param $passphrase * @param null $salt ONLY FOR TESTING * @return string encrypted data in base64 OpenSSL format */ public static function encrypt($data, $passphrase, $salt = null) { $salt = $salt ?: openssl_random_pseudo_bytes(8); list($key, $iv) = self::evpkdf($passphrase, $salt); $ct = openssl_encrypt($data, ‘aes-256-cbc’, $key, true, […]

kotlin接口能缓存一个值吗?

我真的很喜欢在Kotlin中使用接口的默认实现,尤其是像Observable这样的常见模式。 这是我的界面, interface Observable{ // How do I cache this? val observers: MutableList<Observer> get() = LinkedList() fun addObserver(o:Observer){ observers.add(o) } fun removeObserver(o:Observer){ observers.remove(o) } fun notifyObservers(u:T){ for (o in observers){ o.update(u) } } } 接口引用一个observers列表,但get()调用每次都返回一个新的LinkedList() 。 我如何缓存observers的价值,使它只创建一次? 我尝试过使用kotlin-lazy ,但是无法获得正确的语法,或者它不适用于接口。 我的IDE抱怨“委托属性不允许在接口。” UPDATE 基于Yoav的回答,我已经改变了我的界面 interface Observable{ val observers: MutableList<Observer> } 然后在实施课上, class MyObservable : Observable private val […]