Hirdetés

Új hozzászólás Aktív témák

  • Jim-Y
    veterán

    public class RaktarV extends ArrayList<T extends Termek> { }

    Ez semmiképpen nem lehet helyes, hiszen a T típust sehol sem deklaráltad.

    Ebben az esetben nincs típusparamétere az osztálynak:

    public class RaktarV extends ArrayList<Termek> { }

    Ebben az esetben meg van:

    public class Raktar<T extends Termek> extends ArrayList<T> { }

    Mig az első esetben a RaktarV-be bármilyen Termek leszármazottat lehet rakni, a típusparaméteres verzióban csak az aktuális típusparamétert, vagy annak leszármazottjait, pl.

    RaktarV<Gyumolcs> raktar;
    raktar.add(new Termek()); // nem fordul

    Miért a helyes esetben a T-t hol deklaráltam?

    public class Raktar<T extends Termek> extends ArrayList<T> { }

    aha, akkor azt a különbséget már értem, hogy ha
    ArrayList<Termek> -ként hozom létre az osztályt, akkor ebbe mehet Termek, és Termek leszármazott, a másik tipusparaméteres esetben pedig a typus argumentumtól függ, hogy mi mehet bele, tehát
    RaktarV<T extends Termek> extends ArrayList<T> esetén ha olyat írok hogy
    RaktarV<Gyumolcs> = new ...
    akkor Csak Gyumolcs és annak leszármazottai mehetnek bele, de Termek mar nem, csak ugy ha a tipus-argumentum az Termek ->
    RaktarV<Termek> = new ...

    De azt továbbra sem értem, hogy ezt miért így kell szintaktikailag létrehozni :D Bár lehet ezen feleslegesen pörgök, jegyezzem meg 'oszt kész ^^

Új hozzászólás Aktív témák