data class Money(private var _amount: Int, private val currency: String) {
private var amount: Int = _amount
get() {
return if (field < 0) 0 else field
}
override fun toString(): String {
return "Money(amount=$amount, currency='$currency')"
}
}
我想知道我应该传递什么作为参数:var还是val?我应该添加私人修改吗?在哪种情况下是最佳实践?因为当我添加getter时,我必须将其改为var,但正如我所知,用Kotlin写val总是更好?
我想这样编写您给出的代码:
data class Money(private var _amount: Int, private val currency: String) {
private var amount: Int
get() = _amount.coerceAtLeast(0)
set (value) { _amount = value }
override fun toString() = "Money(amount=$amount, currency='$currency')"
}
_amount
可以是一个参数,它不应该是一个字段,它将在构造之后消失,并且只能在init
块、构造函数和字段变量初始化器中访问(想象一下Java中的构造函数参数)。强制至少
是stdlib一个不太重要的事情是,可以推断amount
的类型,但我想在这里显式声明它,因为它对新来的人来说更友好。
我是 Kotlin 的新手,我有以下疑问 - 使用Java到Kotlin转换器(此链接),我将以下Java代码转换为Kotlin。 Java类: 生成的Kotlin类: 但是我不明白Java代码和生成的静态编程语言代码是如何等价的,因为类数据成员的可见性修饰符从私有(Java)变为公共(静态编程语言)。 我相信,如果可见性修饰符被保留(数据成员在静态编程语言中被声明为私有),getter和sett
问题内容: 我正在尝试首次使用Kotlin构建android应用程序。 我想在OnCreate方法外的某些按钮上声明,并且只能在带有findViewById的此函数内对其进行初始化。 我可以像Java中那样用简单干净的代码声明吗? 因为当将其转换为Kotlin时,它看起来像: 然后在初始化OnClick函数时需要添加!标志: 什么是正确和最清洁的方法? 问题答案: 这是一个很好的用例。标记属性可以
因为在protobuf中,在某些场景中定义一个灵活的结构很麻烦。 例如: 事实上,我不希望服务的客户端同时传递a和other。然而,在protobuf中,我们不能将这两个字段放在其中一个,因为另一个是列表字段。因此,声明了上述消息后,当我们只传递a\u other字段时,客户端无法判断a字段实际上是0还是服务器没有传递。 所以我想知道是否为定义一个字符串字段,例如: 并且服务器端和客户端都同意将字
问题内容: 我是SQLAlchemy新手。 假设我在声明模式下有一个用户表: 当我知道没有将对象加载到会话中的用户ID时,我会像这样更新该用户: 我不喜欢使用,我应该不再为此担心吗? 有一个更好的方法吗? 谢谢! 问题答案: 在ORM级别上也有一些更新功能。它还不能处理任何棘手的情况,但是对于单行更新(或批量更新)的普通情况,它可以正常工作。它甚至会遍历所有已加载的对象,并将更新应用于它们。您可以
假设我想为整数列表声明一个简单的代数数据类型: 但是,最后一个声明导致一个错误 数据类必须至少有一个主构造函数参数 > 为什么存在这种限制?查看文档,似乎没有很好的技术理由要求数据类构造函数为非空 不需要编写大量样板代码就可以表达空构造函数吗?如果我把最后的声明改成 然后我就失去了和的免费实现,它们是通过声明免费提供的。 编辑 亚历克斯·费拉托夫在下面给出了一个简短的解决方案。显然,您永远不需要超
问题内容: Java中方法声明的语法如下所示: Java方法声明BNF: 我想知道方括号是什么意思。 谁能给我一个例子吗? Java中的方法声明是否如上(泛型如何)? 在哪里可以找到Java的完整和实际的BNF语法? 问题答案: 方括号表示方法返回数组。例如,您可以编写一个返回int数组的方法,如下所示: 但是,许多人不熟悉此语法,最好避免使用。 您可以在此处找到Java 7的完整语法:http