Menu
Coddy logo textTech

GetterとSetterメソッド

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 11/87。

ゲッターとセッターは、プライベートフィールドへの制御されたアクセスを提供するメソッドです。ゲッターはフィールドの値を取得し、セッターはそれを変更します。

命名規則は標準的なパターンに従います:接頭辞 get または set の後に、最初の文字を大文字にしたフィールド名が続きます。

public class Product {
    private String name;
    private double price;
    
    // nameのゲッター
    public String getName() {
        return name;
    }
    
    // nameのセッター
    public void setName(String name) {
        this.name = name;
    }
    
    // priceのゲッター
    public double getPrice() {
        return price;
    }
    
    // バリデーション付きのセッター
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

セッターの真の力は、バリデーション(検証)ロジックを追加できる点にあります。上記の例では、setPrice は非負の値のみを受け入れるため、オブジェクトを無効なデータから保護できます。

boolean フィールドの場合、ゲッターは通常、get の代わりに is プレフィックスを使用します:

private boolean active;

public boolean isActive() {
    return active;
}

ゲッターのみを提供することで読み取り専用フィールドを、セッターのみを提供することで書き込み専用フィールドを作成することもできます。これにより、外部コードがオブジェクトのデータとどのようにやり取りするかをきめ細かく制御できるようになります。

challenge icon

チャレンジ

簡単

Temperatureコンバーターを作成して、検証ロジックを備えたゲッターとセッターの威力を示しましょう。

コードを整理するために、2つのファイルを作成します。

  • Temperature.java:摂氏で温度値を保持する Temperature クラスを定義します。このクラスには次の要素が必要です。
    • private な celsius フィールド(double)
    • 温度が物理的に実現可能かどうかを追跡する、private な valid フィールド(boolean)
    • 摂氏の値を返す getter getCelsius()
    • 絶対零度(-273.15)以上の値のみを受け付ける setter setCelsius()。値が有効な場合は valid を true に設定し、それ以外の場合は celsius を変更せず、valid を false に設定します
    • boolean フィールド用の getter isValid()(boolean の getter では is プレフィックスを使用することに注意してください)
    • 次の公式を使用して温度を華氏に変換し、返す getter getFahrenheit()(celsius * 9/5) + 32
  • Main.java:Temperature オブジェクトを作成し、入力として摂氏の値を読み取り、setter を使用して値を設定します。その後、温度が有効かどうかと、華氏での相当値を出力します。出力は次の2行形式にします。
    • Valid: true または Valid: false
    • Fahrenheit: X.X(小数点以下1桁を表示)

入力として、摂氏の温度を表す double 値を1つ受け取ります。

華氏の出力を小数点以下1桁にフォーマットするには、String.format("%.1f", value) を使用できます。

自分で試してみよう

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double celsiusInput = scanner.nextDouble();
        
        // TODO: Temperature オブジェクトを作成する
        
        // TODO: セッターを使用して celsius の値を設定する
        
        // TODO: 温度が有効かどうかを出力する (形式: "Valid: true" または "Valid: false")
        
        // TODO: 華氏 (Fahrenheit) に換算した値を出力する (形式: "Fahrenheit: X.X")
        // ヒント: 小数点第1位まで表示するには String.format("%.1f", value) を使用します
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Javaオンラインコンパイラ