hogyan kell használni osztály Java?
csak annyit tudunk, hogy ” minden esetben egy bármely osztály osztja ugyanazt a java.lang.A”
e.g)
Student a = new Student();Student b = new Student();
akkor a.getClass() == b.getClass()
igaz.
most feltételezzük, hogy
Teacher t = new Teacher();
generikumok nélkül az alábbi lehetséges.
Class studentClassRef = t.getClass();
de ez most rossz..?
pl.)public void printStudentClassInfo(Class studentClassRef) {}
Teacher.class
ez elkerülhető generikumok alkalmazásával.,
Class<Student> studentClassRef = t.getClass(); //Compilation error.
most mi a T ?? T típusparaméterek (más néven típusváltozók); szögletes zárójelekkel határolva (<>), az osztály nevét követi.
t csak egy szimbólum, mint egy változó név (Bármilyen név lehet), amelyet az osztályfájl írása során deklarálnak. Később, hogy a t az inicializálás során
érvényes Osztálynévvel lesz helyettesítve (HashMap<String> map = new HashMap<String>();
)
e.g) class name<T1, T2, ..., Tn>
tehát Class<T>
egy adott osztálytípusú osztályobjektumot jelent ‘T
“.,
feltételezzük, hogy az osztály módszereinek ismeretlen típusparaméterekkel kell működniük, mint például az alábbi
Itt t lehet használni, mint String
Típus mint CarName
vagy T lehet használni, mint Integer
típus modelNumber,
vagy T lehet használni, mint Object
típus érvényes autópéldányként.
most itt a fenti az egyszerű POJO, amely lehet használni másképp futási időben.
gyűjtemények pl.) lista, készlet, Hashmap a legjobb példa, amely működni fog a különböző objektumok, mint egy nyilatkozat T, de ha egyszer deklaráltuk t String
e.,g) HashMap<String> map = new HashMap<String>();
akkor csak a String Class példány objektumokat fogadja el.
Generic Methods
Generic methods are methods that Introduction their own type parameters. Ez hasonló a generikus típus deklarálásához, de a típusparaméter hatóköre a deklarált módszerre korlátozódik. Statikus és nem statikus Generikus módszerek, valamint generikus osztály konstruktorok megengedettek.
egy általános módszer szintaxisa tartalmaz egy típusparamétert, szögletes zárójelben, és a módszer visszatérési típusa előtt jelenik meg., Általános módszerek esetén a típusparaméter szakasznak meg kell jelennie a módszer visszatérési típusa előtt.
itt <K, V, Z, Y>
a módszer argumentumaiban használt típusok deklarációja, amelynek a boolean
itt kell lennie.
az alábbiakban; type declaration nem szükséges a módszer szintjén, mivel azt már osztályszinten deklarálták.
class MyClass<T> { private T myMethod(T a){ return a; }}
de alul hibás, mivel a K, V, Z és Y osztályszintű típusparaméterek statikus kontextusban nem használhatók (statikus módszer itt).,
egyéb érvényes forgatókönyvek:
és végül statikus metódus mindig explicit deklarációt igényel; nem aClass<T>
osztályszintből származik. Ennek oka az, hogy a T osztály szintje a példányhoz van kötve.
olvassa el a generikumok korlátozásait is
helyettesítő karakterek és altípus
típus argumentum egy általános módszerhez