capture-of ?

selitystä kiitos

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.

2

329

    Vastaukset 2

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Ööööööö

      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

    1. Uskallanko laittaa sulle viestiä?

      Se viesti on tossa valmiina ja lähettämistä vaille valmis. Kun ei kauhee sti tunneta niin eipä sillä olisi niin väliä. S
      Ikävä
      61
      925
    2. Mikä tekee kaivatustasi

      Haluttavan?
      Ikävä
      34
      857
    3. Lehtikankaan oppilas kuolema

      Mistä lie tyttöparka löytyny, mikä ajaa tekemään itsemurhan tuon ikäsenä 😞
      Kajaani
      16
      856
    4. Onko nyt kaikki asiat käyty läpi?

      Mun mielestä on👍
      Ikävä
      105
      813
    5. Mies joka on oikeasti kiinnostunut

      Ja näkee sut pitkäaikaisena kumppanina, siirtää vaikka vuoria selvittääkseen asiat eikä ota pienintäkään riskiä menettää
      Ikävä
      125
      796
    6. Vieläkin saat

      Sydämen tykyttämään. Vaikka emme näe
      Ikävä
      38
      713
    7. Rauha, sopiiko

      Ei häiritä enää toisiamme. Annetaan molemmille rauha unohtaa, pyydän tätä todella. Kiitos. Miehelle.
      Ikävä
      72
      596
    8. 42
      589
    9. Ei siitä pääse yli, eikä ympäri!

      Pakko se on myöntää ja tunnustaa. Olisin halunnut p*nna sinua sydämeni kyllyydestä. Itseäni vanhemmalle naiselle
      Ikävä
      66
      581
    10. En tahallaan sua välttele...

      Olis niin kiva nähdä jossain muualla kuin kaupassa!
      Ikävä
      40
      557
    11. Kunnanhallitus

      Miten käy täällä vuosia tuomioita jakaneelle valittajalle, hovioikeus hylännyt kaikki syytteet.
      Puolanka
      29
      553
    12. Nyt kaatuu Kuisla

      Reima Kuisla hakee saneeraukseen – Joitakin velkoja on jo ulosotossa https://www.ilkkapohjalainen.fi/reima-kuisla-hakee
      Seinäjoki
      27
      513
    13. Miesten (epä)viehättävyydestä kysymys

      Mieltä askarruttava asia, liki dilemma. Palstallahan jotkut miesoletetut usein toteavat, että kaikki naiset tavoittelev
      Sinkut
      112
      478
    14. Tässä ovat Elämäni biisi vieraat lauantai 19.9. - Yksi vieras on kohuttu TTK-juontajaehdokas

      Elämäni biisi vieraslista on harvinaisen mielenkiintoinen lauantaina. Mukana myös kohuttu TTK-juontajaehdokas, josta ei
      Tv-sarjat
      2
      462
    15. Olit hyödytön.

      Mulle hyödytön..
      Ikävä
      88
      458
    16. Kumpi tästä nyt

      Teki niin vaikeaa?
      Ikävä
      60
      454
    17. Minkä kappaleen

      haluaisit soivan, kun astellaan alttarille?
      Ikävä
      42
      452
    18. Pystyisitkö liikkumaan

      Tai tapailemaan kaivattuasi julkisesti?
      Ikävä
      45
      436
    19. 39
      423
    20. Vieläkö tykkäät

      Minusta niin paljon että olisit valmis?
      Ikävä
      35
      417
    Aihe