Mitä eroa on seuraavilla
Vector v = new Vector();
Vector v2 = new Vector();
ja mitä tuo kysymysmerkki oikein tarkoittaa? Millon tahansa sitä käytänkin, tulee virhe "The method add(capture-of ?) in the type Vector is not applicable for the
arguments (Object)"
Mitä tuo tarkoittaa ja miten sen voi kiertää? Tiedän kyllä mitä parametrisoidut tyypit on, mutta tuo kysymysmerkki ei ole oikein auennut.
capture-of ?
2
304
Vastaukset
- Ööööööö
Kysymysmerkki tarkoittaa sitä, ettei geneerisen muuttujan tyyppi parametria tunneta. Esimerkkisi tapauksessasi et voi käyttää add -metodia (jota ilmeisesti yrität) koska kääntäjä ei pysty tekemään tyyppi tarkastusta, vaan antaa mainitsemasi virheen. Asian voi kiertää julmasti pakotetulla tyyppimuunnoksella esim. '((Vector) v2).add("moi moi")', mutta silloin ohjelman suunnittelu on mennyt metsään. Get -metodia toki pystyt käyttämään esim. 'Object o = v2.get(0)'. Yleensä tuota kysymysmerkkiä käytetään metodien esittelyissä, silloin kun metodin ei tarvitse tietää geneerisnen muuttujan tyyppi parametria, esim:
public static void tulosta(Vector vektori) {
for (Object objekti : vektori)
System.out.println(objekti);
}
Yllä oleva metodi pystyy tulostamaan kaikki Vector oliot. Tai vastaavasti kysymys merkkiä voidaan käyttää seuraavasti:
public static void liikuta(Vector- Ööööööö
Kysyit sitä eroa, niin se on siinä, että esimerkissäsi v2 -muuttuja on esitetty geneerisenä kun taas v -muuttujaa ei. Kääntäjä kohtelee kyseisiä muuttujia erillä tavalla. Geneerisyyden hyöty on juuri siinä, ettei tyyppi tarkastuksia ja muunnoksia tarvitse lisätä koodin itse. Ennen piti tehdä seuraavasti:
Vector autot = new Vector()
v.add(new Auto("Ford"));
Auto eka = (Auto) autot.get(0);
Nykyään voi tehdä seuraavasti:
Vector autot = new Vector()
autot.add(new Auto("Ford"));
Auto eka = autot.get(0);
Ennen pystyi koodaamaan myös väärin, joka johti ajonaikaiseen virheeseen (riville 3):
Vector autot = new Vector()
v.add(new Juna("Pikajuna"));
Auto eka = (Auto) autot.get(0);
Mutta kun käyttää geneerisiä esittelyjä, huolehtii kääntäjä tyyppi tarkastuksesta käännös aikaisesti ja antaa virheen jo käännös vaiheessa (riville 2):
Vector autot = new Vector()
v.add(new Juna("Pikajuna"));
Auto eka = autot.get(0);
Esim. Eclipse heittää punaista riville kaksi ja sen mainitsemasi virheen ("capture-of ?" => "Auto" ja "Object" => "Juna"). Näytit yrittävän lisätä Object luokaan kuuluvaa oliota sinne vektoriin, joten jos väkisin haluat saada toimimaan sen koodin, niin voit kokeilla muuttaa v2:n määrittelyn seuraavaksi: "Vector v2 = new Vector()". Tuota kutsutaan näköjään vapaaksi tyypiksi ja alla olevassa linkissä näyttää olevan jotain siitä ja sen rajoitteista, luvussa 7:
http://www.cs.utu.fi/staff/jouni.smed/SHR07-SPOO.pdf
Alla viellä muutama linkki:
http://en.wikipedia.org/wiki/Generics_in_Java
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Tuossa yllä olevassa linkissä on kerrottu kappaleessa viisi tuosta add käskyyn liittyvästä ongelmasta vapailla tyypeillä, ja siitä miten ongelma yleensä ratkaistaan.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Eroa Orpo! Orpo eroa!
Suomen kansa vaatii viimein ottamaan meidät huomioon, eikä vain ulkomaalaisia pääomasijoittajia. Koska täällä Suomessa552537Odottavan aika on pitkä, Lindtmanin hallitusta tule jo!
Eilisen perusteella nykyinen hallitus epäonnistui kaikissa vaalilupauksissaan, joten olemme ansainneet uudet eduskuntava631682SDP esti Suomen luisumisen kohti 1984 Orwell -yhteiskuntaa
Äärioikeistohallitus olisi halunnut Stasin tapaan mikrofonit jokaisen kansalaisen kotiin, mutta SDP esti tuon siirtymän71640Naiset ei halua kilttejä miehiä
Näin se vaan on..jos olet ilman tatskoja, et rähjää, sinulla ei ole rikosrekisteriä, olet liian kiltti, et sano pahasti,2631525Wille Rydman (ps) osoitti olevansa kommunisti
Hän toistaa Neuvostoliiton virhettä. Haluaa pitää palveula yllä maksoi mitä maksoi, vaikkei ole maksavia asiakkaita. --81508Seiska: Helmi Loukasmäki paljastaa - Näin Danny ja Helmi tapasivat
Helmi Loukasmäki, 25, ja Ilkka Danny Lipsanen, 83, ovat seurattuja julkkiksia. Mutta tiesitkö, miten he tapasivat? Lue251198Ainoastaan 10 aloitusta ekasivulla yhdeltä henkilöltä
Kovasti on vaivaa, ei oo muuta tekemistä tällä henkilöllä päivisin ja öisin... Taas märehtimistä ja samaa jankutusta.241041Kiinteistökauppoja
Onko totta ettö haapaveden kaupunki on ostanut vanhan kesoilin kiinteistön? Kuulemma siihen muuttaa autokorjaamo vanhan411012RAAMATULLINEN KASTE ON SAPATTI-LAUANTAI, EI SUNNUNTAI
Aihe, josta ehkä on eniten kiistaa kristillisten seurakuntien piirissä, on kysymys oikeasta raamatullisesta pyhäpäivästä4041002Menettämisestä
Ajatteletko, että olet menettänyt mahdollisuutesi häneen? Osaatko sanoa miksi niin tapahtui?78954