当前位置: 首页 > 知识库问答 >
问题:

Kotlin:公共getter返回不可变列表,但私有getter应返回可变列表

邓鸿彩
2023-03-14

我希望我的类有一个字段,该字段返回所有公共访问的不可变列表,但在对象实例中,我希望列表是可变的,以便我可以向其添加元素。

   class GrammarParser {
    private val grammars: List<Grammar> = mutableListOf()
    get() = field.toList()
   }
 class GrammarParser {
    private val _grammars: MutableList<Grammar> = mutableListOf()
    val grammars: List<Grammar>
    get() = this._grammars.toList()
   }

我试过了,但不确定这是否被视为良好做法?

共有1个答案

金承嗣
2023-03-14

在Kotlin中,每个可变列表

示例:

class GrammarParser {
    private val mutableGrammars = mutableListOf<Grammar>()
    val grammars: List<Grammar> = mutableGrammars
}

在第二个示例中,每次调用getter时都会创建列表的副本(快照)。这意味着,在调用getter并获得列表后,即使在其他地方修改了语法,这些更改也不会反映在您获得引用的只读列表视图中。这可能是你想要的东西——那么你正在做的就可以了。但如果这不是你想要的,那么我上面给出的例子将避免复制。

 类似资料:
  • 我对Kotlin很陌生,并试图将一个项目从Java迁移到它。我对Kotlin的属性和它们的getters/setter以及可见性范围有点困惑。 我想要实现的是: 所以基本上我需要创建一个具有私有属性的类。此属性应由公共 getter 访问,但它不应具有 setter。此外,此属性应该是内部可变的,以便可以使用某种方法(如 更改其值。 据我所知,我不能将其声明为,因为在这种情况下,它将是完全不可变的

  • 在私有类中创建一个全局List并具有getter和setter方法会更好,还是只公开它会更好?Java的标准是什么? 我被教导将变量设为私有,只有getter和setter方法,但是访问公共列表肯定比私有列表更好。 这是我的观点,但我当然更喜欢按照标准去做,而不是按照看起来好的去做。

  • 如何在Kotlin中创建一个具有私有getter(或只是没有)但具有公共setter的属性? 不能使用错误: 在我的例子中,原因是Java Interop:我希望我的Java代码能够调用,但不能调用。

  • 我已经开始使用Kotlin作为java的替代品,并且非常喜欢它。然而,如果不跳回java领域,我就无法找到解决方案: 我有一个

  • 问题内容: 返回对象的名称为。因此,当我致电时,此代码将失败。我有什么办法可以解决临时问题吗?还是我应该怎么做? ps这是我在python中的第一个代码。我认为这是功能。 问题答案: 您可以使用返回的反向迭代器。调用时,它会在列表中进行原位反转,并返回None。 编辑: 我知道您现在正在尝试执行的操作,在我看来,仅凭列表理解就可以轻松完成此操作: 这基本上是在第一个元素之后查看所有元素,并收集所有

  • 我试图访问MyModelClass上的getter方法,但我的代码返回