Tag: 科特林

在超类的初始化中使用variables时,重写variables会创建一个NPE

假设我们有以下设置: open class Foo(open val img: Image) { val use = img.graphics } class Bar(override val img: BufferedImage) : Foo(img) 初始化时,使用img.width创建一个NPE。 我认为问题在于,显然即使img直接在Bar的构造函数中传递,当它在Foo中使用时,它并不指向它,而是指向Bar类中的重写variables。 我怎样才能避免这一点?

有可能改变一个实例的动态方法?

我写下了这个代码: open class Test(){ override fun toString(): String { return “This is test!” } } fun createTestX(): Test { return object : Test() { override fun toString(): String { return super.toString() + “XXX” } } } fun main(args: Array) { val x = createTestX() println(x) } 它按预期的方式工作,但我很好奇是否可以使用例如lambda来更改实例的方法,如下所示: val x = Test() x.toString = () -> […]

不可空的getter的可空字段

我试图用可为null的setter和可为空的字段来实现不可为空的getter。 字段parent可以为null,这意味着父项是this 。 如果父项不为空,则父项是parent值。 Getter不能为空,因为它返回this或parent Setter可以设置可为空的值,因为它可以删除当前父项。 我试过这个: @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = “parent_id”) var _parent: T? = null var parent: T get() = if (isParent) this as T else _parent!! set(value) { _parent = if (value == null) null else value.parent } 我不喜欢_parentvariables,但是它对setter没有帮助,因为它仍然不是parent: T ,所以解决方案不起作用。

如何把元素放到地图上并返回地图

考虑这个函数,我们试图向toMap(): MutableMap结果添加一个元素toMap(): MutableMap : fun add(key: String, value: Any): MutableMap { val map = asMap() map.put(key, value) return map } 这很简单,但我想知道是否可以简化为“单线”? 就像是: fun add(key: String, value: Any): MutableMap = asMap().magicPut(key, value) 编辑:显然我不够清楚: asMap()是一个用户定义的函数返回一个MutableMap与一些条目。 add方法应该添加到这个已经存在的地图。 EDIT2:基于评论我重命名为toMap() asMap() 。

格式Kotlin字符串多次出现

我有一个字符串模板看起来像这样: val template = “Something %s something else %s. The first was %1$s, the second was %2$s” 与Java一起工作良好。 如何与Kotlin一起使用这个反复出现的字符串值? 看起来像%1$s是不可能的。 编译器警告: unresolved reference: s

如何编写委托给另一个属性的委托?

我试图减少重复的代码在我的自定义属性获取/设置器只代理不同的层中相同的属性。 代码解释得更好: var emailText get() = presenter.emailText set(value) { presenter.emailText = value } 我的目标是这样的: var emailText by PropertyDelegate(presenter.emailText) 问题是,我找不到适当的语法来引用实际的属性,而不是它的值。 有一个简单的方法来做到这一点?

两个构造函数有什么不同?

这种types的构造函数有什么不同? class ColorsArray(context: Context) {} 和 class ColorsArray(var context: Context){}

将`var allByDefault:Int?`导致错误?

在kotlin的引用的属性和字段部分,写下下面的例子: var allByDefault:Int? //错误:显式初始化器需要,默认的getter和setter隐含 但是,我测试代码,没有编译和运行错误。 这是我的代码“ fun main(args:Array){ var allByDefault:Int? } 那么为什么这个文档写道: 错误:显式初始化器需要,默认的getter和setter隐含 我搜索谷歌的帮助,但还没有find任何结果,可以帮助我。 @toniedzwiedz的答案已经解决了这个问题。 我的错。 我错误的财产和变数。

为什么当我尝试返回一个检查的generics参数的值时出现types不匹配?

在下面的代码中, “Happy Halloween!” , 42等被标记为“types不匹配”。 (必需:T,find:字符串(或Int)),但不应该编译器能够推断返回值types检查是正确的types? interface Type class StringType() : Type class IntType1() : Type class IntType2(val a: Int, val b: Int) : Type fun something(type: Type): T = when (type) { is StringType -> “Happy Halloween!” is IntType1 -> 42 is IntType2 -> type.a * type.a + type.b * type.b + type.a * […]

如何在Kotlin“预加”一个字符串到字符串

这可能是最新的Kotlin问题:在Kotlin中,我可以在字符串前添加一个字符? 例如 fun main(args: Array) { val char = ‘H’ val string = “ello World” val appendingWorks = string + char //but not what I want… //val prependingFails = char + string //no .plus(str:String) version val prependingWorkaround1 = char.toString() + string val prependingWorkaround2 = “” + char + string val prependingWorkaround3 = String(charArray(char)) + string […]