/** * ドメイン非依存URL出力フィルタ * javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい * * データベースには絶対URL(https://minner.asia)を保持し、 * 表示時に現在のドメイン(home_url())に動的変換する */ function javadrill_make_urls_dynamic($content) { if (empty($content)) { return $content; } // データベース内の絶対URLを現在のhome_url()に置換 $old_url = 'https://minner.asia'; $new_url = untrailingslashit(home_url()); // http版も対応(念のため) $content = str_replace($old_url, $new_url, $content); $content = str_replace('http://minner.asia', $new_url, $content); return $content; } // 投稿本文、ウィジェット、タームの説明、抜粋に適用 add_filter('the_content', 'javadrill_make_urls_dynamic', 20); add_filter('widget_text', 'javadrill_make_urls_dynamic', 20); add_filter('term_description', 'javadrill_make_urls_dynamic', 20); add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20); 104 「static修羅道」 Step07 解答例 | Javaドリル

104 「static修羅道」 Step07 解答例

eyecatch104-step07 104「static修羅道」

User.java

public class User {
  // クラス全体で共有する「次に割り当てるID」
  private static int nextId = 1;

  // このインスタンスに割り当てられたID(個別)
  private int id;

  // ユーザーの名前(個別)
  private String name;

  // コンストラクタ:Userを生成するたびにIDを自動で付ける
  public User(String name) {
    this.id = nextId;  // 今のnextIdを割り当て
    nextId++;          // 次のインスタンス用に+1しておく
    this.name = name;
  }

  // ユーザー情報を出力
  public void printInfo() {
    System.out.println("[ID: " + id + "] 名前: " + name);
  }
}

Main.java

public class Main {
  public static void main(String[] args) {
    User u1 = new User("Alice");
    User u2 = new User("Bob");
    User u3 = new User("Carol");

    u1.printInfo();
    u2.printInfo();
    u3.printInfo();
  }
}

実行結果

[ID: 1] 名前: Alice
[ID: 2] 名前: Bob
[ID: 3] 名前: Carol

解説

この問題では、インスタンスごとに一意なIDを自動付与する方法として
static 変数をカウンタとして使うテクニックを学びました。


staticな nextId とは?

private static int nextId = 1;
  • すべての User インスタンスで 共有されるカウンタ
  • 初期値を 1 にしておき、インスタンスが作られるたびに1つずつ増やす
  • id = nextId; nextId++; によって、一意なIDを順番に割り振ることができる

なぜ id は非staticなのか?

private int id;
  • id はそのインスタンス専用の情報
  • static にしてしまうと、全インスタンスが同じ値を持ってしまう
  • 各インスタンスが 自分だけのID を持つためには、非staticである必要がある

現場でよく使われる設計

このような「ID連番割り振り」は、実際の開発現場でも非常によく使われます。

例:

  • ユーザーID
  • 注文番号
  • セッション番号

いずれも「一意な番号を自動でふる」ために static 変数を活用します。


まとめ

  • static 変数は インスタンス間で共有するカウンタとして使える
  • コンストラクタ内で id = nextId++ とすることで、一意なIDを割り当てられる
  • static と非static の「役割の違い」を、設計として使い分けることが重要

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


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

// tesh:
// 似た問題でまた詰まる未来、見えてるなら止めよう。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

コメント

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