Java Academy · Pelajaran

Kelas Utiliti dan Kaedah Kilang Statik

Reka bentuk kelas utiliti yang tidak boleh dijadikan tika dan dedahkan kaedah kilang statik sebagai alternatif kepada pembina.

Pelajaran 4 daripada 413 langkah

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")); // Hello

Kelas 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 agregat
  • from — kilang penukaran
  • valueOf — kilang penukaran (API lama)
  • getInstance — instans tunggal
  • create/newInstance — objek baharu
  • get — 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()); // true

API 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 singleton

Semakan 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
Percuma untuk bermula

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

  1. Peraturan Lebihan Muatan Kaedah
  2. Parameter Varargs
  3. Medan Statik dan Pemalar
  4. Kelas Utiliti dan Kaedah Kilang Statik
← Kembali ke Java Academy