Kelas Utiliti dan Kaedah Kilang Statik
Reka bentuk kelas utiliti yang tidak boleh dijadikan tika dan dedahkan kaedah kilang statik sebagai alternatif kepada pembina.
Kelas Utiliti dan Kaedah Kilang Statik ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Kelas Utiliti dan Kaedah Kilang Statik
Kelas utiliti menyediakan kaedah pembantu statik tanpa keadaan instans. Kaedah kilang statik ialah alternatif bernama kepada pembina yang menawarkan kebolehbacaan, pengcachean dan fleksibiliti yang lebih baik.
Kelas Utiliti
Kelas utiliti tidak mempunyai keadaan instans — ia ialah bekas kaedah statik. Jadikannya tidak boleh diinstanskan dengan mengisytiharkan pembina private.
final class StringUtils {
// Private constructor prevents instantiation
private StringUtils() {
throw new UnsupportedOperationException("Utility class");
}
public static boolean isBlank(String s) {
return s == null || s.strip().isEmpty();
}
public static String capitalize(String s) {
if (isBlank(s)) return s;
return Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase();
}
}
System.out.println(StringUtils.isBlank(" ")); // true
System.out.println(StringUtils.capitalize("hELLO")); // HelloKelas Utiliti Pustaka Standard
Pustaka standard Java dipenuhi kelas utiliti: koleksi, tatasusunan, objek, fail, laluan dan matematik.
import java.util.*;
List<Integer> nums = new ArrayList<>(Arrays.asList(5, 2, 8, 1, 9, 3));
Collections.sort(nums);
System.out.println(nums); // [1, 2, 3, 5, 8, 9]
System.out.println(Collections.min(nums)); // 1
System.out.println(Collections.max(nums)); // 9
Collections.shuffle(nums); // random order
int[] arr = {3, 1, 4, 1, 5};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [1, 1, 3, 4, 5]
System.out.println(Arrays.binarySearch(arr, 4)); // 3 (index)Kaedah Kilang Statik
Kaedah kilang statik ialah kaedah statik bernama yang mencipta dan mengembalikan satu instans. Manfaatnya: nama yang deskriptif, kebolehan mengembalikan instans yang dicache atau subjenis, serta kebolehan mengembalikan null.
class Connection {
private final String host;
private final int port;
private final boolean ssl;
private Connection(String host, int port, boolean ssl) {
this.host = host; this.port = port; this.ssl = ssl;
}
// Named factory methods — more expressive than constructors
public static Connection plain(String host) {
return new Connection(host, 80, false);
}
public static Connection secure(String host) {
return new Connection(host, 443, true);
}
}
Connection c = Connection.secure("api.example.com");
// Much clearer than: new Connection("api.example.com", 443, true)Pengcachean dengan Kilang Statik
Kilang statik boleh mengembalikan instans yang dicache, sekali gus mengelakkan peruntukan berulang untuk nilai lazim (seperti yang dilakukan oleh Integer.valueOf bagi -128..127).
class Color {
private static final Map<String, Color> CACHE = new HashMap<>();
public final int r, g, b;
private Color(int r, int g, int b) {
this.r = r; this.g = g; this.b = b;
}
public static Color of(int r, int g, int b) {
String key = r + "," + g + "," + b;
return CACHE.computeIfAbsent(key, k -> new Color(r, g, b));
}
public static final Color RED = of(255, 0, 0);
public static final Color GREEN = of(0, 255, 0);
public static final Color BLUE = of(0, 0, 255);
}
System.out.println(Color.of(255,0,0) == Color.RED); // true (cached)Kilang berbanding Pembina: Penamaan
Konvensyen penamaan umum untuk kaedah kilang statik:
of— kilang agregatfrom— kilang penukaranvalueOf— kilang penukaran (API lama)getInstance— instans tunggalcreate/newInstance— objek baharuget— fleksibel
// Java API examples:
Optional.of(value) // of
LocalDate.from(temporal) // from
Integer.valueOf(42) // valueOf
Calendar.getInstance() // getInstance
Array.newInstance(type, length) // newInstance
// Your own:
HttpRequest.post("https://api.example.com/users")
ApiResponse.error(404, "Not found")
Payment.creditCard("4242...", 9999, "USD")Mengembalikan Subjenis
Kaedah kilang boleh mengembalikan subjenis walaupun jenis pulangan yang diisytiharkan ialah antara muka. Pemanggil tidak bergantung pada pelaksanaan konkrit.
interface Validator<T> {
boolean validate(T value);
String errorMessage();
}
class EmailValidator implements Validator<String> {
public boolean validate(String email) { return email.contains("@"); }
public String errorMessage() { return "Invalid email address"; }
}
class Validators {
// Returns interface type — hides implementation
public static Validator<String> email() { return new EmailValidator(); }
public static Validator<String> notBlank() {
return new Validator<>() {
public boolean validate(String s) { return s != null && !s.isBlank(); }
public String errorMessage() { return "Value required"; }
};
}
}Builder melalui Kilang Statik
Gabungkan pembina private dengan kilang statik dan Builder bersarang untuk pembinaan objek yang kompleks.
class EmailMessage {
private final String to, subject, body;
private final boolean html;
private EmailMessage(Builder b) {
this.to = b.to; this.subject = b.subject;
this.body = b.body; this.html = b.html;
}
public static Builder builder(String to) { return new Builder(to); }
public static class Builder {
private final String to;
private String subject = "", body = "";
private boolean html = false;
Builder(String to) { this.to = to; }
public Builder subject(String s) { this.subject = s; return this; }
public Builder body(String b) { this.body = b; return this; }
public Builder html() { this.html = true; return this; }
public EmailMessage build() { return new EmailMessage(this); }
}
}
EmailMessage.builder("alice@co.com").subject("Welcome!").html().build();Pengesahan dalam Kaedah Kilang
Kaedah kilang amat sesuai untuk mengesahkan input sebelum pembinaan — lontarkan pengecualian yang bermakna berserta konteks.
class PortNumber {
private final int value;
private PortNumber(int value) { this.value = value; }
public static PortNumber of(int port) {
if (port < 1 || port > 65535)
throw new IllegalArgumentException(
"Port must be 1-65535, got: " + port);
return new PortNumber(port);
}
public static PortNumber http() { return new PortNumber(80); }
public static PortNumber https() { return new PortNumber(443); }
public int value() { return value; }
public boolean isPrivileged() { return value < 1024; }
}
System.out.println(PortNumber.https().isPrivileged()); // trueAPI Koleksi: Kilang Statik
Java 9+ menambahkan List.of(), Set.of(), Map.of() — kaedah kilang statik yang mencipta koleksi tidak berubah.
import java.util.*;
List<String> fruits = List.of("Apple", "Banana", "Cherry");
Set<Integer> ids = Set.of(1, 2, 3, 4, 5);
Map<String, Integer> ages = Map.of("Alice", 30, "Bob", 25);
// All are unmodifiable:
try {
fruits.add("Durian"); // UnsupportedOperationException
} catch (UnsupportedOperationException e) {
System.out.println("Cannot modify!");
}
// Map.entry and Map.ofEntries for > 10 entries
Map<String, String> config = Map.ofEntries(
Map.entry("host", "localhost"),
Map.entry("port", "8080")
);Bila Patut Mengutamakan Kaedah Kilang
Utamakan kaedah kilang statik berbanding pembina apabila:
- Anda mahukan nama yang deskriptif
- Kilang mungkin mengembalikan instans yang dicache atau subjenis
- Pengesahan sebelum pembinaan diperlukan
- Anda mahu mengawal bilangan instans (Singleton, kumpulan)
// Constructor: hard to know what this means
new Complex(0.5, -1.2);
// Factory: clear meaning
Complex.fromPolar(1.3, Math.PI / 4); // polar form
Complex.rectangular(0.5, -1.2); // rectangular form
// Constructor: no caching
new Boolean(true); // deprecated — creates new object!
// Factory: returns cached instance (Boolean.TRUE or FALSE)
Boolean.valueOf(true); // returns Boolean.TRUE singletonSemakan Pantas
Apakah kelebihan utama kaedah kilang statik berbanding pembina public?
Ringkasan: Kelas Utiliti dan Kaedah Kilang Statik
Perkara utama:
- Kelas utiliti: kelas final dengan pembina private dan semua kaedah bersifat statik
- Kaedah kilang statik ialah alternatif bernama kepada pembina
- Penamaan umum: of, from, valueOf, getInstance, cipta, newInstance
- Kilang boleh mengembalikan instans yang dicache — lihat Integer.valueOf(-128..127)
- Kilang boleh mengembalikan subjenis sambil menyembunyikan pelaksanaan konkrit
- Gunakan pembina dalam kilang untuk pembinaan kompleks dengan banyak parameter
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Kelas Utiliti dan Kaedah Kilang Statik” percuma?
Ya — teks penuh “Kelas Utiliti dan Kaedah Kilang Statik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Kelas Utiliti dan Kaedah Kilang Statik”?
Reka bentuk kelas utiliti yang tidak boleh dijadikan tika dan dedahkan kaedah kilang statik sebagai alternatif kepada pembina. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Kelas Utiliti dan Kaedah Kilang Statik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Peraturan Lebihan Muatan Kaedah
- Parameter Varargs
- Medan Statik dan Pemalar
- Kelas Utiliti dan Kaedah Kilang Statik