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

328

    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. Mikä hänessä

      Saa sut kuumaksi?
      Ikävä
      85
      1335
    2. Henkilöauto ajoi puuhun Suomussalmella

      Henkilöauto ajoi puuhun Suomussalmen torin laitamilla. Poliisi epäilee tutkivansa tapausta. Silminnäkijä
      Suomussalmi
      35
      1041
    3. Kattoikkuna puuttui - vai puuttuiko sittenkään?

      Tönölään ei saatu mökkejä, kun kattoikkunasta oli pula. Näyttää konkurssihakemus tulleen kuitenkin 31.8., joten kattoikk
      Kuhmo
      19
      855
    4. Petteri A-studiossa: "Ihmiset ovat alkaneet saada töitä" ..mitä vitt..

      Missä todellisuudessa toi Orpo oikein elää, Suomen työttömyys 2000-luvun ja EU/OECD-maiden korkein tuplat niiden keskita
      Maailman menoa
      153
      680
    5. Kajaanissa on kadoksissa 27vuotias nainen.

      Poliisin tiedoteessa on ,että 1.9.2026 katosi kajaanissa 27vuotias nainen. Kuva löytyy ja tiedot pituudesta ,iästä yms.
      Kajaani
      13
      670
    6. Hei sinä nainen

      Haluaisin koko ajan olla kiinni sinussa😟❤️❤️
      Ikävä
      46
      659
    7. Kuka oli kuskina

      Volvo suistunut päin koivua torin laidalla? Oliko vauhtia liikaa vai sairaskohtaus vai humala?
      Suomussalmi
      13
      627
    8. Nythän todellisuus on kuitenkin se

      että miehen täytyy tehdä miehen työ. Olla mies. Naisen täytyy tehdä naisen työ. Olla nainen. Voimme puhua pehmeitä ja
      Sinkut
      184
      616
    9. Onko kaivattusi

      hyvä ihminen? Kerro
      Ikävä
      31
      542
    10. Mies sun käytös satutti...

      Mahdatko sitä ymmärtää...😔 Olisipa kaikki mennyt hyvin. Vaikea tästä on enää mitään ihanaa rakentaa.
      Ikävä
      39
      528
    Aihe