"Nos, végre egy újabb kis lecke a generikus gyógyszerekről."
"Most elmondom, hogyan lehet megkerülni a típustörlést."
– Ah. Ezt szeretném tudni.
"Amint azt valószínűleg már tudja, a Java osztály típussal rendelkezik, amely egy objektum osztályára való hivatkozás tárolására szolgál. "Íme néhány példa:
Class clazz = Integer.class;
Class clazz = String.class;
Class clazz = "abc".getClass();
– Ah.
"De valószínűleg nem tudja, hogy létezik egy osztály, az osztály is. Az általános osztályváltozók pedig csak a type argumentum által meghatározott típusra utalhatnak. Íme néhány példa:
Class<Integer> clazz1 = Integer.class; // Everything works well
Class<String> clazz2 = Integer.class; // Compilation error
Class<String> clazz1 = String.class; // Everything works well
Class<String> clazz2 = int.class; // Compilation error
Class<? extends String> clazz1 = "abc".getClass(); // Everything works well
Class<Object> clazz2 = "abc".getClass(); // Compilation error
– Miért működik ez így?
"Nos, az Integer osztály mezőjének értéke (azaz Integer.class) valójában egy Class<Integer> objektum."
– De menjünk tovább.
"Kihasználva azt a tényt, hogy a Class<T> — egy általános, és hogy az ilyen típusú változók csak T típusú értéket tartalmazhatnak, ezeket a következőképpen rakhatja össze finoman:"
class Zoo<T>
{
Class<T> clazz;
ArrayList<T> animals = new ArrayList<T>
Zoo(Class<T> clazz)
{
this.clazz = clazz;
}
public T createNewAnimal()
{
T animal = clazz.newInstance();
animals.add(animal);
return animal
}
}
Zoo<Tiger> zoo = new Zoo<Tiger>(Tiger.class); // This is where we pass the type!
Tiger tiger = zoo.createNewAnimal();
"Ez nem egy rendkívül trükkös manőver – egyszerűen csak hivatkozást adunk át a kívánt típusra. De ha egyszerűen az osztályt használjuk a Class <T> helyett, akkor valaki véletlenül két különböző típust ad át: az egyiket T argumentumként , egy másikat pedig a kivitelezőnek."
"Ah. értem. Semmi természetfeletti nem történt, de semmi szörnyű. Van utalás a típusra, és használhatod. Működik, és ez nekem elég."
"A fiúból férfi lesz! A "működik, és ez elég jó nekem" gyakran a legjobb megoldás."
"Most sok mindent át lehetne csinálni a Java-ban, de meg kell őriznünk a kompatibilitást a régi kóddal."
"A több tízezer népszerű csiszolt könyvtár a legerősebb érv ma a Java mellett. Így a Java továbbra is a legnépszerűbb nyelv a visszafelé kompatibilitás fenntartásával, így nem tud radikális újításokat bevezetni."
"Nos, meg fogom építeni a saját Java-mat blackjackkel és…"
"Rendben, már fáradt vagyok a naptól. A következő alkalomig."
"Viszlát, Rishi, és köszönöm ezt az érdekes leckét."
GO TO FULL VERSION