@BD di Rivenhill: Karena pertanyaan lama ini telah mendapat perhatian baru tahun lalu, mari kita lanjutkan sedikit, hanya demi diskusi. Tubuh doIt
metode Anda tidak melakukan apa-apa- T
spesifik sama sekali. Ini dia:
public class Clazz<T> {
static <T> void doIt(T object) {
System.out.println("shake that booty '" + object.getClass().toString()
+ "' !!!");
}
// ...
}
Jadi, Anda dapat sepenuhnya menghapus semua variabel tipe dan hanya kode
public class Clazz {
static void doIt(Object object) {
System.out.println("shake that booty '" + object.getClass().toString()
+ "' !!!");
}
// ...
}
Baik. Tapi mari kita kembali lebih dekat ke masalah aslinya. Variabel tipe pertama pada deklarasi kelas adalah redundan. Hanya metode kedua yang diperlukan. Kita mulai lagi, tetapi ini bukanlah jawaban terakhir:
public class Clazz {
static <T extends Saying> void doIt(T object) {
System.out.println("shake that booty "+ object.say());
}
public static void main(String args[]) {
Clazz.doIt(new KC());
Clazz.doIt(new SunshineBand());
}
}
// Output:
// KC
// Sunshine
interface Saying {
public String say();
}
class KC implements Saying {
public String say() {
return "KC";
}
}
class SunshineBand implements Saying {
public String say() {
return "Sunshine";
}
}
Namun, semuanya terlalu ribut tentang apa-apa, karena versi berikut berfungsi dengan cara yang sama. Yang dibutuhkan hanyalah tipe antarmuka pada parameter metode. Tidak ada variabel tipe yang terlihat di mana pun. Apakah itu benar-benar masalah awal?
public class Clazz {
static void doIt(Saying object) {
System.out.println("shake that booty "+ object.say());
}
public static void main(String args[]) {
Clazz.doIt(new KC());
Clazz.doIt(new SunshineBand());
}
}
interface Saying {
public String say();
}
class KC implements Saying {
public String say() {
return "KC";
}
}
class SunshineBand implements Saying {
public String say() {
return "Sunshine";
}
}