Menu
CoddyTech

Ulasan: Wadah Generik

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 58 dari 87.

challenge icon

Tantangan

Mudah

Mari kita buat sistem penyimpanan serbaguna yang menggabungkan semua hal yang telah kamu pelajari tentang generik! Kamu akan membuat class Container yang dapat menyimpan, mengambil, dan memproses elemen dengan tipe apa pun, beserta method utilitas yang menunjukkan penggunaan wildcard.

Kamu akan menyusun kodemu dalam tiga file:

  • Container.java: Buat class generik Container<T> yang mengelola kumpulan item. Container-mu harus menggunakan ArrayList<T> secara internal untuk menyimpan elemen. Sertakan method untuk add(T item) guna menambahkan elemen, get(int index) untuk mengambil elemen pada posisi tertentu, size() untuk mengembalikan jumlah item, dan isEmpty() untuk memeriksa apakah container tidak memiliki elemen. Tambahkan juga method getAll() yang mengembalikan list internal.
  • ContainerUtils.java: Buat class utilitas dengan method generik statis yang bekerja dengan container-mu:

    printAll(Container<?> container) - Menggunakan wildcard tak berbatas untuk mencetak semua elemen dalam container apa pun, satu elemen per baris.

    countItems(Container<? extends Number> container) - Menggunakan wildcard berbatas atas untuk menghitung jumlah semua nilai numerik dalam container, lalu mengembalikan hasilnya sebagai double.

    addDefaults(Container<? super Integer> container) - Menggunakan wildcard berbatas bawah untuk menambahkan bilangan bulat 1, 2, dan 3 ke container apa pun yang dapat menyimpan bilangan bulat.

    <T> T getLastOrDefault(Container<T> container, T defaultValue) - Method generik yang mengembalikan elemen terakhir dalam container, atau nilai default jika container kosong.

  • Main.java: Satukan sistem container generikmu! Kamu akan menerima tiga input: sebuah kata (String), sebuah bilangan bulat, dan sebuah bilangan desimal.

    Pertama, buat Container<String> dan tambahkan kata ke dalamnya dua kali. Cetak String container: lalu gunakan printAll untuk menampilkan isinya.

    Berikutnya, buat Container<Double> dan tambahkan nilai desimal ke dalamnya. Cetak satu baris kosong, lalu Number sum: [sum] menggunakan sumValues.

    Lalu, buat Container<Number> dan panggil addDefaults padanya. Cetak satu baris kosong, lalu After adding defaults: dan gunakan printAll untuk menampilkan isinya.

    Terakhir, buat Container<Integer> yang kosong dan gunakan getLastOrDefault dengan input bilangan bulatmu sebagai nilai default. Cetak satu baris kosong, lalu Last or default: [result].

Kamu akan menerima tiga input secara berurutan: sebuah kata (String), sebuah bilangan bulat, dan sebuah bilangan desimal.

Tantangan ini menggabungkan class generik, method generik, parameter tipe berbatas, dan ketiga jenis wildcard. Perhatikan bagaimana setiap bagian memiliki tujuan berbeda: class generik menyediakan penyimpanan yang aman dari kesalahan tipe, wildcard berbatas memungkinkan pembacaan dan penulisan yang fleksibel, dan method generik menawarkan operasi yang dapat digunakan kembali pada berbagai tipe container!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca input
        String word = scanner.nextLine();
        int intValue = Integer.parseInt(scanner.nextLine());
        double doubleValue = Double.parseDouble(scanner.nextLine());
        
        // TODO: Buat Container<String> dan tambahkan kata tersebut dua kali
        // Cetak "String container:", lalu gunakan ContainerUtils.printAll()
        
        // TODO: Buat Container<Double> dan tambahkan nilai double
        // Cetak baris kosong, lalu "Number sum: [sum]" menggunakan ContainerUtils.countItems()
        
        // TODO: Buat Container<Number> dan panggil ContainerUtils.addDefaults() untuknya
        // Cetak baris kosong, lalu "After adding defaults:" dan gunakan ContainerUtils.printAll()
        
        // TODO: Buat Container<Integer> yang kosong
        // Gunakan ContainerUtils.getLastOrDefault() dengan intValue sebagai nilai default
        // Cetak baris kosong, lalu "Last or default: [result]"
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online