Pertimbangkan contoh ini (khas dalam buku OOP):
Saya memiliki Animalkelas, di mana masing Animal- masing dapat memiliki banyak teman.
Dan subclass seperti Dog, Duck, Mousedll yang menambah perilaku tertentu seperti bark(), quack()dll
Inilah Animalkelasnya:
public class Animal {
private Map<String,Animal> friends = new HashMap<>();
public void addFriend(String name, Animal animal){
friends.put(name,animal);
}
public Animal callFriend(String name){
return friends.get(name);
}
}
Dan inilah beberapa cuplikan kode dengan banyak pengetikan:
Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());
((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();
Apakah ada cara saya bisa menggunakan obat generik untuk jenis kembali untuk menghilangkan typecasting, sehingga saya bisa mengatakan
jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();
Berikut adalah beberapa kode awal dengan tipe pengembalian yang disampaikan ke metode sebagai parameter yang tidak pernah digunakan.
public<T extends Animal> T callFriend(String name, T unusedTypeObj){
return (T)friends.get(name);
}
Apakah ada cara untuk mengetahui tipe pengembalian saat runtime tanpa menggunakan parameter tambahan instanceof? Atau setidaknya dengan melewatkan kelas tipe bukan instance dummy.
Saya mengerti obat generik adalah untuk mengkompilasi jenis waktu, tetapi apakah ada solusi untuk ini?