1. ホーム
  2. kotlin

[解決済み] Kotlinのゲッターとセッター

2022-10-11 23:15:11

質問

Javaでは、例えば、私は自分自身でゲッターを書くことができます(IDEによって生成された)またはlombokの@Getterのようなアノテーションを使用します - これは非常に簡単でした。

しかしKotlinでは のゲッターとセッターをデフォルトで持っています。 . しかし、私はそれらを使用する方法を理解することはできません。

Javaに似たようなものを作りたいのですが。

private val isEmpty: String
        get() = this.toString() //making this thing public rises an error: Getter visibility must be the same as property visibility.

では、ゲッターはどのように機能するのでしょうか?

どのように解決するのか?

Kotlinではゲッターとセッターは自動生成されます。と書くと

val isEmpty: Boolean

以下のJavaコードと同じです。

private final Boolean isEmpty;

public Boolean isEmpty() {
    return isEmpty;
}

あなたの場合、privateアクセス修飾子は冗長です - isEmptyはデフォルトでプライベートであり、ゲッターによってのみアクセスすることができます。オブジェクトのisEmptyプロパティを取得しようとするときは、実際にgetメソッドを呼び出すことになります。Kotlinのgetter/setterをより理解するために:以下の2つのコードサンプルは等しいです。

var someProperty: String = "defaultValue"

var someProperty: String = "defaultValue"
    get() = field
    set(value) { field = value }

また、私が指摘したいのは this はあなたのプロパティではなく、クラスのインスタンスであるということです。もし、ゲッターやセッターの中でフィールドの値にアクセスしたい場合は、予約語の field を使うことができます。

val isEmpty: Boolean
  get() = field

もし、getメソッドをパブリックアクセスで持ちたいだけなら、このコードを書くことができます。

var isEmpty: Boolean
    private set 

setアクセサの近くにあるprivate修飾子により、この値を設定できるのはオブジェクト内部のメソッドのみです。