Generikus típusból objektum

Címkék
Generikus típusból objektum
2009-09-14T21:31:54+02:00
2009-09-15T13:01:06+02:00
2022-07-31T21:55:29+02:00
Javacoder2
Hi!

Ennek mi a megfelelő szintaxisa?
A kikommentezett sor még helyes lenne.
De példányosítani már nem tudom a típust.

public <T> void MyMethod() { // T myObject = null; T myObject = new T(); }

Thx.
Mutasd a teljes hozzászólást!
Ez igy nem mukodhet, futasidoben T egy sima Object.

Esetleg atadhatod a peldanyositando osztaly Class-at a metodusnak, amin keresztul reflectionnal peldanyositod .newInstance()-al!

Szerk: >>Itt talalsz egy erdekes cikket errol!
Mutasd a teljes hozzászólást!

  • A cikkben csak olyan megoldás van, ahol explicit módon paraméterként át van adva egy Class<T> típusú objektum a metódusnak, és az átadott objektum newInstance metódusán keresztül jön létre a T típusú objektum.

    Nem lehet úgy ha nincs paramétere a metódusnak?

    Az a problémám, hogy ez a szintaxis is hibás a compiler szerint:
    T.class.newInstance();
    Mutasd a teljes hozzászólást!
  • Ennek a C# kódnak keresem a Java megfelelőjét:
    T myObject = Activator.CreateInstance<T>();
    Mutasd a teljes hozzászólást!
  • Az a problémám, hogy ez a szintaxis is hibás a compiler szerint:
    T.class.newInstance();


    Akkor megismetlem:

    Ez igy nem mukodhet, futasidoben T egy sima Object.


    Javaban elegge primitiv modon implementaltak a generikusokat, gyakorlatilag csak annyi tortenik, hogy a kompiler forditaskor leellenorzi a kod helyesseget a generikus parameterek alapjan is, majd beszur neked cast-okat es eltorlodik minden generikus tipusra vonatkozo informacio (type erasure, keress ra guglin). Ahol a kododban T (vagy barminek is nevezed) van, futasidoben sima Object lesz.

    Pl. egy ArrayList<Integer> Object-eket fog tarolni, amikor beteszel egy Integer-t, az upcast-olodik Object-re, kivetelkor meg downcast-olodik Integer-re. Erre azert volt szukseg, hogy megtartsak a kompatibilitast a generic-eket nem tamogato regebbi kodokkal...

    Ahhoz, hogy egy metodust parameterezhess a peldanyositando osztallyal, at kell adnod neki valamilyen modon egy Factory-t (legegyszerubb esetben ez maga a Class ojjektum), maskepp nem lehet!
    Mutasd a teljes hozzászólást!
  • Ilyen Javaban nincs, lasd erasure, futasidoben meg Reflectionnal sem erheted el a generikus tipusra vonatkozo informaciokat, mert azok forditaskor torlodtek. Ez a Java egyik nagy gyengesege C#-al szemben...
    Mutasd a teljes hozzászólást!
  • Hm, ez érdekes...

    [off]
    Akkor elvileg ez az (egyik) oka annak, hogy .NET 2.0 nem kompatibilis .NET 1.1-gyel?
    Tehát hogy "valamit valamiért"?
    [/off]
    Mutasd a teljes hozzászólást!
  • Akkor elvileg ez az (egyik) oka annak, hogy .NET 2.0 nem kompatibilis .NET 1.1-gyel?


    Ezt nem tudom, .NET-hez nem ertek...
    Mutasd a teljes hozzászólást!
Címkék
abcd