104 「static修羅道」 Step05 解答例


StringUtil.java

public class StringUtil {

  // null または空文字列であれば true を返す
  public static boolean isNullOrEmpty(String str) {
    return str == null || str.isEmpty();
  }

  // 先頭1文字を大文字にし、残りをそのまま返す(例: hello → Hello)
  public static String capitalize(String str) {
    if (str == null || str.isEmpty()) {
      return str;  // nullまたは空文字列はそのまま返す
    }

    // substring(0, 1): 先頭1文字
    // substring(1): 2文字目以降
    return str.substring(0, 1).toUpperCase() + str.substring(1);
  }

  // インスタンス化を禁止する private コンストラクタ(ユーティリティクラスの常套パターン)
  private StringUtil() {
    // 何もしない
  }
}

Main.java

public class Main {
  public static void main(String[] args) {
    System.out.println("isNullOrEmpty(null): " + StringUtil.isNullOrEmpty(null));
    System.out.println("isNullOrEmpty(\"\"): " + StringUtil.isNullOrEmpty(""));
    System.out.println("isNullOrEmpty(\"hello\"): " + StringUtil.isNullOrEmpty("hello"));
    System.out.println("capitalize(\"hello\"): " + StringUtil.capitalize("hello"));
    System.out.println("capitalize(\"\"): " + StringUtil.capitalize(""));
  }
}

実行結果

isNullOrEmpty(null): true
isNullOrEmpty(""): true
isNullOrEmpty("hello"): false
capitalize("hello"): Hello
capitalize(""): 

解説

この問題では、「状態を持たず、処理だけを提供するクラス」としての
**ユーティリティクラス(ツールクラス)**を設計・実装しました。


🔸 ユーティリティクラスとは?

ユーティリティクラスとは、「インスタンス化せずに使う便利なメソッド集」です。
Java標準ライブラリでも、MathCollections などがこれに該当します。

特徴:

  • メソッドはすべて static
  • 状態(インスタンス変数)を持たない
  • コンストラクタを private にしてインスタンス化を禁止

isNullOrEmpty メソッドのポイント

return str == null || str.isEmpty();

nullチェックと空文字チェックの両方を一度に行える、よくあるパターンです。
多くのアプリケーションで、入力値チェックとして重宝されます。


capitalize メソッドの注意点

return str.substring(0, 1).toUpperCase() + str.substring(1);
  • 先頭1文字だけを大文字化
  • 残りはそのまま
  • 空文字やnullを受け取ったときの安全対策も実装

なぜ private コンストラクタにするのか?

private StringUtil() {}

この一行で、new StringUtil()外部から不可能にできます。
「newしても意味がないクラス」をインスタンス化させないための、安全設計です。


まとめ

  • ユーティリティクラスは 処理だけを持つクラスとして、static メソッドで構成される
  • インスタンス変数を使わないため、new は不要(むしろ禁止すべき)
  • Javaにおける「設計の意図」としての static の使い道が、明確に見えてくる

104 ステップアップ問題 「static修羅道」


Just Keep Typing, Baby!では、この「static修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// これは「理解してる風」では絶対超えられない壁。