gpt4 book ai didi

java - Kotlin:在内部使用可变时从 getter 返回不可变集合

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:22 25 4
gpt4 key购买 nike

<分区>

我有一些字段是集合,它可以在包含它的服务内部发生变异,并且其他一些服务应该能够访问它而不可能自己改变它。

在java中可以这样实现:

public class Test {

private final List<Integer> list = new ArrayList<>();

public List<Integer> getList() {
return Collections.unmodifiableList(list);
}
}

在 kotlin 中,我存储声明为 MutableList 的字段:

val someCollection: MutableList<Int> = ArrayList()
get() = unmodifiableList(field)

但是 getter 显然会返回类型为 MutableList 的对象。

理想情况下,我想实现这样的目标:

val someCollection: MutableList<Int> = ArrayList()
get() = unmodifiableList(field) as List // <-- returns List instead of MutableList

换句话说,是否可以更改生成的 getter 的签名以返回另一个接口(interface)。很可能答案是否定的,我想知道为什么?是否认为这是一些不好的做法?

我看到有可能做这样的事情:

private val _someCollection: MutableList<Int> = ArrayList()
val someCollection: List<Int>
get() = unmodifiableList(field)

但它确实比手动创建的 getter 更糟糕,因为它多创建了一个字段。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com