0Pricing
Java Academy · Pelajaran

Class Utilitas dan Metode Pabrik Statis

Rancang class utilitas yang tidak dapat dibuat instansnya dan sediakan metode pabrik statis sebagai alternatif konstruktor.

Class Utilitas dan Metode Pabrik Statis adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Kelas Utilitas dan Metode Pabrik Statis

Kelas utilitas menyediakan metode pembantu statis tanpa state instance. Metode pabrik statis merupakan alternatif bernama untuk konstruktor yang menawarkan keterbacaan, caching, dan fleksibilitas yang lebih baik.

Kelas Utilitas

Kelas utilitas tidak memiliki state instance — kelas ini merupakan wadah metode statis. Jadikan kelas tersebut tidak dapat dibuat instance-nya dengan mendeklarasikan konstruktor privat.

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 Utilitas Pustaka Standar

Pustaka standar Java dipenuhi kelas utilitas: Collections, Arrays, Objects, Files, Paths, dan Math.

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)

Metode Pabrik Statis

Metode pabrik statis adalah metode statis bernama yang membuat dan mengembalikan sebuah instance. Manfaatnya: nama yang deskriptif, dapat mengembalikan instance yang disimpan dalam cache atau instance subtipe, serta dapat 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)

Caching dengan Pabrik Statis

Pabrik statis dapat mengembalikan instance yang disimpan dalam cache sehingga alokasi berulang untuk nilai umum dapat dihindari (seperti yang dilakukan Integer.valueOf untuk -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)

Pabrik vs Konstruktor: Penamaan

Konvensi penamaan umum untuk metode pabrik statis:

  • of — pabrik agregat
  • from — pabrik konversi
  • valueOf — pabrik konversi (API lama)
  • getInstance — singleton
  • create/newInstance — objek baru
  • 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 Subtipe

Metode pabrik dapat mengembalikan subtipe sementara tipe nilai kembalian yang dideklarasikan adalah antarmuka. Pemanggil tidak bergantung pada implementasi konkret.

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 Pabrik Statis

Gabungkan konstruktor privat dengan pabrik statis dan Builder tersarang untuk membangun objek 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();

Validasi dalam Metode Pabrik

Metode pabrik sangat cocok untuk memvalidasi input sebelum konstruksi — lemparkan pengecualian yang bermakna dan memiliki 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: Pabrik Statis

Java 9+ menambahkan List.of(), Set.of(), Map.of() — metode pabrik statis yang membuat koleksi immutable.

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

Kapan Sebaiknya Menggunakan Metode Pabrik

Lebih baik gunakan metode pabrik statis daripada konstruktor jika:

  • Anda menginginkan nama yang deskriptif
  • Pabrik mungkin mengembalikan instance yang disimpan dalam cache atau instance subtipe
  • Validasi sebelum konstruksi diperlukan
  • Anda ingin mengendalikan jumlah instance (Singleton, pool)
// 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

Pemeriksaan Singkat

Apa keunggulan utama metode pabrik statis dibandingkan konstruktor publik?

Ringkasan: Kelas Utilitas dan Metode Pabrik Statis

Hal-hal penting:

  • Kelas utilitas: kelas final dengan konstruktor privat dan semua metode bersifat statis
  • Metode pabrik statis merupakan alternatif bernama untuk konstruktor
  • Penamaan umum: of, from, valueOf, getInstance, create, newInstance
  • Pabrik dapat mengembalikan instance yang disimpan dalam cache — lihat Integer.valueOf(-128..127)
  • Pabrik dapat mengembalikan subtipe sekaligus menyembunyikan implementasi konkret
  • Gunakan Builder di dalam pabrik untuk konstruksi dengan banyak parameter yang kompleks

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Class Utilitas dan Metode Pabrik Statis” gratis?

Ya — teks lengkap “Class Utilitas dan Metode Pabrik Statis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Class Utilitas dan Metode Pabrik Statis”?

Rancang class utilitas yang tidak dapat dibuat instansnya dan sediakan metode pabrik statis sebagai alternatif konstruktor. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Class Utilitas dan Metode Pabrik Statis” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Aturan Overloading Metode
  2. Parameter Varargs
  3. Field Statis dan Konstanta
  4. Class Utilitas dan Metode Pabrik Statis
← Kembali ke Java Academy