java - Kotlin:只有 getter 的私有(private)可变属性

标签 java kotlin

我是 Kotlin 的新手,正在尝试将一个项目从 Java 迁移到它。我对 Kotlin 的属性和它们的 getter/setter 以及可见性范围感到有点困惑。

我想实现的是:

public class Foo {

    private int number;

    public int getNumber() {
        return number;
    }

    public void increment() {
        number++;
    }

}

所以基本上我需要创建一个具有私有(private)属性 number 的类。这个属性应该可以被 public getter 访问,但是它不应该有一个 setter。此外,此属性应该是内部可变的,以便可以使用 increment() 等方法更改其值。

据我所知,我不能将它声明为 val,因为在那种情况下,它是完全不可变的,即使是在类的实例中,所以我不能增加它。看起来应该是 var。但是后来我没有看到使属性本身成为 private 并将此属性的 getter 设为 public 的选项,因为看起来属性及其 getters/setters应该具有相同的可见范围...

最佳答案

如果您使用 Intellij,您只需将代码粘贴到 Kotlin 类中,就会收到以下内容:

class Foo {

  var number: Int = 0
    private set

  fun increment() {
    number++
  }
}

这基本上也是您问题的答案...

private set 表示 setter 仅私下可见。因此您可以在 Foo 中访问它,但不能从外部访问它。您显式设置的 0(与 Java 不同)。然后:默认情况下属性和函数是public

同时检查 Kotlin reference regarding properties (specifically getter/setter)

关于java - Kotlin:只有 getter 的私有(private)可变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52076700/

相关文章:

kotlin - 处理这种情况的最佳方法是 "smart cast is imposible"

android - 在 Android 上使用 gRPC 处理文件下载

java - Collections.sort的BigO是什么?

java - RPG技能系统

java - 识别单个字母的代码?

java - 如何使用 Java 中的 Apache poi 创建指向其他工作表上的过滤器的超链接?

java - spring security 从数据库中获取用户 ID

kotlin - Kotlin 中的 MutableMap 和 Map 有什么不同?

gradle - 使用 Kotlin Sync 配置 Clean LibGDX 项目失败,类型代码无效 :82

error-handling - 在Kotlin中使用HTTP客户端时如何正确处理错误?