【Java】フィールドとローカル変数

IT
  • テストコードを書いているとき、勘違いがあったのでmemo
  • 結論:今回やりたかったことは基本的にできない
  • 調べている時、ローカル変数とフィールドを混同していることに気づいた

やりたかったこと

  • ユニットテスト
  • テスト対象クラスのメソッド中の変数(ローカル変数)の値をテストコードから参照
  • 下記コードを例にしたとき、str1str2をテストで参照して確認したい
public class ReturnString {
    public void printStr(){
        String str1 = "Hello ";
        String str2 = "Java!";

        System.out.println(str1 + str2);
    }
}

混同していたフィールドとローカル変数

  • ローカル変数

    • 上の例でのstr1str2
    • メソッド内で定義されている変数
    • 外部からは参照できない
  • フィールド

    • クラス内で定義されている変数
    • メソッド内ではない
    • publicであれば外部からも参照可能
    • privateでも参照手段あり

こういったコードであれば参照できた

  • 下記はstr1str2をフィールドで定義しているので、参照可能
  • ただし、不用意にスコープの広い変数を使用するのは良くない
    • 下記コード例は非推奨
    • ローカル変数にするべき
    • 少なくともprivateで定義するべき
public class ReturnString {
    public String str1 = "Hello ";
    public String str2 = "Java!";

    public void printStr(){
        System.out.println(str1 + str2);
    }
}

結論

  • スコープ(変数が有効な範囲)が違うためできない
  • ローカル変数のスコープ→メソッドの中のみ
  • フィールドはFieldクラスなど、色々な方法で参照できる
  • 調べていた時、「java test メソッドの中」のような検索ワードだとフィールドの情報にヒットして、混同してしまっていた
    • ローカル変数について失念していた僕が悪いです(^_^;)
    • けど、同じように迷ってしまう人ももしかしたらいるかもなので、メモとして残しました

参考

コメント

タイトルとURLをコピーしました