Kotlin有一个const关键字。但我不认为kotlin中的常数是我所认为的。这似乎与C中的const非常不同。在我看来,its仅适用于静态成员和Java中的原语,不针对类变量进行编译:
data class User(val name: String, val id: Int)
fun getUser(): User { return User("Alex", 1) }
fun main(args: Array<String>) {
const val user = getUser() // does not compile
println("name = ${user.name}, id = ${user.id}")
// or
const val (name, id) = getUser() // does not compile either
println("name = $name, id = $id")
}
由于这似乎不起作用,我认为我真正想要的是第二个类,它删除我不想支持的操作:
class ConstUser : User
{
ConstUser(var name: String, val id: int) : base(name, id)
{ }
/// Somehow delte the setters here?
}
这种方法的明显缺点是,我不能忘记更改这个类,以防我更改User
,这对我来说非常危险。
但是我不确定如何做到这一点。所以问题是:如何用意识形态静态编程语言制作不可变的对象?
Kotlin中的const
修饰符用于编译时常量。不变性是通过val
关键字实现的。
静态编程语言有两种类型的属性:只读val
和可变var
。
data class User(val name: String, val id: Int)
val user = User("Alex", 1)
user.name = "John" // won't compile, `val` cannot be reassigned
user = User("John", 2) // won't compile, `val` cannot be reassigned
您不必以某种方式隐藏或删除val
属性的任何setter,因为这些属性没有setter。
问题内容: 如何在Swift中创建不可变数组? 简要阅读文档会建议您可以做 但是可悲的是,这实际上产生了一个可变的,固定大小的数组。这种可变性通常会产生令人困惑的别名和令人怀疑的别名,并且函数会改变其参数: 没有比C好多少了。 如果我想要不变性,最好的选择是将其包装成这样: 好像疯了。我在这里想念什么? 更新(2015-07-26): 这个问题可以追溯到Swift的早期。从那以后,对Swift进行
我需要将可变列表对象转换为不可变列表。java中可能的方法是什么?
我有一个Java/Kotlin互操作问题。一个Kotlin不可变列表被编译成一个普通的java.util.ArrayList,它是可变的! 静态编程语言(库): Java(消费者): 如何使我的 Kotlin 类从 Java 的角度来看也是完全不可变的?
问题内容: 我有Java / Kotlin互操作问题。Kotlin不可变列表被编译为可变的普通java.util.ArrayList! Kotlin(图书馆): Java(消费者): 从Java的角度来看,如何也使我的Kotlin类完全不可变? 问题答案: 默认情况下,Kotlin中的所有非集合都是 编译时只读类型 ,但不是 不可变的 。请参见以下代码段: 要真正拥有一个不变的列表,请考虑Guav
我正在使用JAXB从XSD文件创建Java对象。我正在创建不可变包装器来隐藏由JAXB生成的对象(之前我更新了JAXB对象,以实现不可变接口并将接口返回给客户机。但意识到改变自动生成的类是不好的,因此使用包装器) 目前,我正在将这些不可变的包装返回到客户端应用程序。是否有任何选项,使自动生成的类将是不可变的,并避免创建不可变包装器的额外工作。任何其他方法都是鼓励的。 谢谢
由于这是一个热门的话题,这些天,我无法理解某些概念。请原谅,如果我听起来很愚蠢,但当我试图创建不可变对象时,我发现大多数帖子如下 null null 此测试用例失败并打印Cassandra。 如果我做错了什么让我知道。