我试图通过使用委托属性将一些结构引入到我们当前的模型中,并且发现了这种奇怪的行为 为了简单,可以说我们有这个类: class Test{ val data:MutableMap = mutableMapOf() var classProp:String by data } 和这个字符串”{\”data\”:{\”classProp\”:\”propValue\”}}” 在调试中使用jackson映射器(带或不带kotlin模块和kotlinreflection ) 调试variableswatch 你可以看到属性数据指向了一个不同的对象,然后是classProp的委托 你能告诉我做错了什么吗? jackson如何将一个新对象设置为已经初始化的val 我可以命令jackson使用现有的地图,而不是创建一个新的地图 谢谢
当我想从sharedpreferences得到int值时,我得到了UnsupportedOperationException但是我从logcat显示,这个类是Int 。 怎么了? operator inline fun get(@XMLS xml: String, @KEYS key: String, defaultValue: T? = null): T { Timber.d(“${T::class} + $xml + $key + $defaultValue”) return when (T::class) { String::class -> getShared(xml)?.getString(key, defaultValue as? String ?: “”) as? T ?: “” as T Int::class -> { Timber.d(“not triggered”) //< getShared(xml)?.getBoolean(key, defaultValue as? Boolean == true) […]
参考.putFile(imageUri) kotlin.UninitializedPropertyAccessException: lateinit property imageUri has not been initialized at com.ysnel.envantert.StandUpdate.update(StandUpdate.kt:177) at com.ysnel.envantert.StandUpdate.access$update(StandUpdate.kt:19) at com.ysnel.envantert.StandUpdate$onCreate$3.onClick(StandUpdate.kt:73) at android.view.View.performClick(View.java:5076) at android.view.View$PerformClick.run(View.java:20279) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5930) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
我在JSONArray类上创建了一个扩展函数iterator() ,并在for循环中使用了下面的错误: Type inferece failed: Not enough information to infer parameter T in operator fun JSONArray.iterator () L Iterator 我的代码是: class GetFlickrJsonData(private val mCallBack: OnDataAvailable, private var mBaseUrl: String, private var mLanguage: String, private var mMatchAll: Boolean) : GetRawData.OnDownLoadComplete { init { Log.d(TAG,”GetFlickrJsonData Called”) } companion object { private val TAG = “GetFlickrJsonData” } private […]
我前几天正在做一个项目,这个工作正在进行中,我今天又回来了,不再编译,但是我没有改变任何东西,据我所知… 这是文件: package windall.console.account.api.persistence import com.fasterxml.jackson.annotation.JsonIgnore import windall.console.account.api.dtos.PaymentDto import windall.console.account.api.model.Tenant import java.time.LocalDateTime import javax.persistence.Column import javax.persistence.Entity import javax.persistence.GeneratedValue import javax.persistence.Id import javax.persistence.JoinColumn import javax.persistence.ManyToOne @Entity data class Receipt ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, val amount: Long, @JsonIgnore @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = “tenant_id”) val tenant: Tenant? = null, @Column(name = […]
我有一个工厂方法,产生一些列表: 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的模型有一个字段: class MyModel { private val theValue: Double get() { return 1.0 } } 并在检票页面: new PropertyModel(model , “theValue”) 它会失败: WicketRuntimeException: Property could not be resolved for class: class MyModel expression: theValue 解决方案:删除私人修改器: class MyModel { val theValue: Double get() { return 1.0 } } 有没有办法解决这个问题(保持私人修改)? (wicket 7.9.0,Kotlin 1.2)
我已经用Kotlin和Junit 5写了一些基本的unit testing。不幸的是,当我从Intellij IDEA运行它们时,Gradle没有find这些测试。 我收到来自Gradle的消息“没有find给定的测试包括:[de.mhaug.phd.btcwallet.BasicTests]”和来自Intellij的消息“未收到测试事件”。 有趣的是,使用“./gradlew:clean:test”从命令行运行它报告一个成功的构建。 不过,我的第一个测试显然是红色的,所以这表明Gradle没有执行它。 我已经尝试运行它更详细的输出,但没有任何帮助出现。 这是一个最小的(不)工作的例子: package de.mhaug.phd.btcwallet import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Test class BasicTests { @Test fun hey() { assertEquals(3,1+1) } @Test fun hey2() { assertFalse(3==1+1) } } 这是我的build.gradle: buildscript { ext.kotlin_version = ‘1.2.10’ repositories { mavenCentral() } dependencies { classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” } } group ‘de.mhaug.phd’ version ‘1.0-SNAPSHOT’ apply plugin: […]
假设你有这样的数据类pojo,它表示典型的基于gson的响应表示来自服务器。 data class User( @field:SerializedName(“id”) val id: String, @field:SerializedName(“name”) val name: String, @field:SerializedName(“user_phone”) val phone: String?) ID和名称字段是必需的, 电话字段是可选的 所以这个模型所期望的适当的json,例如: { “id”: “someHash”, “name”: “John Snow” } 有时服务器可以发送json,如: { “id”: “someHash” } 不幸的是,这样的json解析成功没有任何错误,因为gson使用不安全的reflection ,并为Java编写。 所以作为结果将有损坏kotlin模型与空值存储在非空字段 我想在json反序列化层上为这个模型提供validation,因为最好是在那里接收一个错误,而不是在应用程序的任何其他部分,这个部分需要非空字段。 我正在寻找这个问题的任何consize解决方案。 当然,你可以为每个模型提供一些明确的validationfunction fun User.validate() { if (id == null) throw JsonParseException(“‘id’ is null!”) if (name == null) throw JsonParseException(“‘name’ is […]