Method Generik
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 55 dari 87.
Meskipun class generik membuat seluruh class bekerja dengan berbagai tipe, terkadang kamu hanya memerlukan satu method generik. Method generik mendeklarasikan parameter tipenya sendiri, terpisah dari generik pada tingkat class.
Parameter tipe muncul sebelum tipe pengembalian dalam signature method:
public class Utility {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
}
String[] names = {"Alice", "Bob"};
Integer[] numbers = {1, 2, 3};
Utility.printArray(names); // Berfungsi dengan String[]
Utility.printArray(numbers); // Berfungsi dengan Integer[]Perhatikan <T> yang ditempatkan di antara modifier dan tipe nilai kembalian. Ini mendeklarasikan T sebagai parameter tipe untuk method ini. Compiler menyimpulkan tipe sebenarnya dari argumen yang kamu berikan.
method generik juga dapat mengembalikan tipe generik:
public static <T> T getFirst(T[] array) {
if (array.length > 0) {
return array[0];
}
return null;
}
String first = getFirst(new String[]{"a", "b"}); // Mengembalikan "a"Kamu dapat menggunakan beberapa parameter tipe saat diperlukan:
public static <K, V> void printPair(K key, V value) {
System.out.println(key + ": " + value);
}
printPair("Age", 25); // String dan Integer
printPair(1, "First"); // Integer dan StringGeneric method sangat berguna dalam utility class saat kamu membutuhkan operasi yang fleksibel dan dapat digunakan kembali tanpa membuat generic class.
Tantangan
MudahMari buat toolkit utilitas yang menunjukkan fleksibilitas method generik. Kamu akan membuat class dengan method yang dapat digunakan kembali dan bekerja dengan tipe apa pun, untuk menunjukkan bahwa method generik dapat berdiri sendiri tanpa class generik.
Kamu akan mengatur kodemu dalam dua file:
ArrayUtils.java: Buat class utilitas yang berisi method generik untuk bekerja dengan array. Class-mu harus memiliki tiga method generik static:getLast- Method generik yang menerima array bertipeTdan mengembalikan elemen terakhir. Jika array kosong, kembalikannull.swap- Method generik yang menerima array bertipeTdan dua indeks integer, lalu menukar elemen pada posisi tersebut. Method ini tidak mengembalikan apa pun.printWithLabel- Method generik dengan dua parameter tipe,KdanV. Method ini menerima label bertipeKdan nilai bertipeV, lalu mencetaknya dalam format:[label]: [value]Main.java: Gunakan method generikmu! Kamu akan menerima empat input: dua kata (String) dan dua angka (integer).Pertama, buat array
String[]yang berisi kedua kata. GunakangetLastuntuk mendapatkan elemen terakhir dan cetak:Last word: [result]Berikutnya, buat array
Integer[]yang berisi kedua angka. Panggilswapuntuk menukar elemen pada indeks 0 dan 1, lalu cetak:After swap: [first], [second]Terakhir, tunjukkan method generik dengan dua parameter dengan memanggil
printWithLabeldua kali:- Sekali dengan kata pertama sebagai label dan angka pertama sebagai nilai
- Sekali dengan angka pertama sebagai label dan kata kedua sebagai nilai
Kamu akan menerima empat input secara berurutan: kata pertama, kata kedua, angka pertama, angka kedua.
Perhatikan bagaimana setiap method mendeklarasikan parameter tipenya sendiri dengan <T> atau <K, V> sebelum tipe pengembalian. Compiler menyimpulkan tipe sebenarnya dari argumen yang kamu berikan: kamu tidak perlu menentukannya secara eksplisit saat memanggil method!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String firstWord = scanner.nextLine();
String secondWord = scanner.nextLine();
int firstNumber = scanner.nextInt();
int secondNumber = scanner.nextInt();
// TODO: Buat array String[] yang berisi kedua kata
// TODO: Gunakan ArrayUtils.getLast untuk mendapatkan elemen terakhir
// Cetak: "Last word: [result]"
// TODO: Buat array Integer[] yang berisi kedua angka
// TODO: Panggil ArrayUtils.swap untuk menukar elemen pada indeks 0 dan 1
// Cetak: "After swap: [first], [second]"
// TODO: Panggil ArrayUtils.printWithLabel dengan firstWord sebagai label dan firstNumber sebagai nilai
// TODO: Panggil ArrayUtils.printWithLabel dengan firstNumber sebagai label dan secondWord sebagai nilai
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online