Kurzusok
/
Java
Java
/
Tanterv
/
Generikus típusok
Ge

Generikus típusok ebben a kurzusban: Java

11 feladat

A(z) Generikus típusok fogalomról

A generikus típus olyan generikus osztály vagy interfész, amely típusok fölött van paraméterezve. Ez lehetővé teszi, hogy a fordító kikényszerítse a típusbiztonságot az osztályon vagy az interfészen.

Nézzük ezt a nem generikus Container interfészt:

class Container {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

Mivel Object típusokat fogad és ad vissza, bármilyen nem primitív típussal működik. Ez azonban áldozatokkal jár, mert előfordulhat, hogy az egyik kódrészlet Integer-re számítva hívja meg a get metódust, míg egy másik String-eket adva hívja a set-et, ami futásidejű kivételt eredményez.

A generikus osztály és a generikus interfész formája a következő:

class ClassName<T1, T2, ..., Tn> { ... }
interface InterfaceName<T1, T2, ..., Tn> { ... }

Az osztály vagy interfész neve után álló, csúcsos zárójelekkel (<>) határolt típusparaméter-szakasz adja meg a T1, T2, ..., Tn típusparamétereket (más néven típusváltozókat). Ezeket az osztály vagy interfész törzsében használhatod, hogy megkapd a generikus típusbiztonságot.

Íme a Container generikus változata:

class Container<E> {
    private E object;

    public void set(E object) { this.object = object; }
    public E get() { return object; }
}

Létrehozásakor most már meg kell adnunk, milyen típust tárol, és a fordító kikényszeríti ezt a megkötést:

// empty <> can infer from context
Container<String> stringContainer = new Container<>();
// compiler knows this is a String, so it is allowed
stringContainer.set("Some string");
// no cast needed, compiler knows it is a String
String result = stringContainer.get();
// this causes a compiler error:
stringContainer.set(42);
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Generikus típusok fogalmat