掌握 Java 基礎語法後,開發者往往面臨大量重複代碼的困擾,例如頻繁撰寫 System.out.println()。為了解決這個問題,我們可以建立自己的工具庫,將常用功能封裝起來。本文將示範如何創建一個名為 com.bruceeckel.tools 的套件,並實作一個簡潔的 P 類別,提供 rint() 和 rintln() 等靜態方法,支援所有基本資料類型的輸出。
//: P.java
// The P.rint & P.rintln shorthand
package com.bruceeckel.tools;
public class P {
public static void rint(Object obj) { System.out.print(obj); }
public static void rint(String s) { System.out.print(s); }
public static void rint(char[] s) { System.out.print(s); }
public static void rint(char c) { System.out.print(c); }
public static void rint(int i) { System.out.print(i); }
public static void rint(long l) { System.out.print(l); }
public static void rint(float f) { System.out.print(f); }
public static void rint(double d) { System.out.print(d); }
public static void rint(boolean b) { System.out.print(b); }
public static void rintln() { System.out.println(); }
public static void rintln(Object obj) { System.out.println(obj); }
public static void rintln(String s) { System.out.println(s); }
public static void rintln(char[] s) { System.out.println(s); }
public static void rintln(char c) { System.out.println(c); }
public static void rintln(int i) { System.out.println(i); }
public static void rintln(long l) { System.out.println(l); }
public static void rintln(float f) { System.out.println(f); }
public static void rintln(double d) { System.out.println(d); }
public static void rintln(boolean b) { System.out.println(b); }
} ///:~
編譯完成後,只需在專案中設定 CLASSPATH 指向套件根目錄,即可透過 import com.bruceeckel.tools.*; 在任何地方使用 P.rint() 和 P.rintln(),大幅減少鍵盤輸入量。
在實際開發中,CLASSPATH 設定錯誤常導致難以除錯的問題。作者曾遇到一個案例:專案中引入了第 17 章的 CodePackager.java,其中定義了一個非 public 的 P 類別。當此類別意外進入類路徑時,編譯器會優先載入它,導致找不到 com.bruceeckel.tools.P 中的方法。錯誤訊息極具誤導性,因為編譯器只報告「方法未找到」,而不會提示發現了同名的不同類別。
根本原因在於 import 敘述的語意:它只是告訴編譯器「在這裡可能找到 P 類別」。一旦編譯器在類路徑搜尋過程中發現第一個 P 類別,就會停止搜尋並使用它。解決方案是確保整個類路徑中,每個類別名稱唯一對應一個類別定義。
tools 或 util)CLASSPATH,避免同名類別衝突建立個人工具庫不僅能提升開發效率,更能強化代碼復用與維護性,是邁向專業 Java 開發者的關鍵步驟。