Avatar billede Godfather75 Nybegynder
22. august 2012 - 00:19 Der er 7 kommentarer og
1 løsning

Hjæp til Generic

hvad er (<? extends E>)?
F.eks
public boolean addAll(int startIdx, final Collection<? extends E> c)

Hvad står <? extends E> for?
Avatar billede arne_v Ekspert
22. august 2012 - 00:38 #1
<? extends E> betyder <et eller andet som er E eller en subklasse af E>
Avatar billede arne_v Ekspert
22. august 2012 - 03:40 #2
eksempel:

import java.util.ArrayList;

public class GWC {
    public static void mstd(ArrayList<P> lst) {
        P o = lst.get(0);
        lst.add(new C2());
    }
    public static void mspec(ArrayList<? extends P> lst) {
        P o = lst.get(0);
        // syntax error - for good reasons: we can not add a C2 to this list
        //lst.add(new C2());
    }
    public static void main(String[] args) {
        // basic
        ArrayList<P> lst1 = new ArrayList<P>();
        lst1.add(new C1());
        mstd(lst1);
        // problem
        ArrayList<C1> lst2 = new ArrayList<C1>();
        lst2.add(new C1());
        // syntax error - for good reasons: we can not add a C2 to this list
        //mstd(lst2);
        // solution
        mspec(lst2);
    }
}

class P {
}

class C1 extends P {
}

class C2 extends P {
}
Avatar billede Godfather75 Nybegynder
27. august 2012 - 17:54 #3
Mange tak for hjælpen arne_v. Skal nemlig have det som emne i min uddannelse senere i semestret.

Men nu har jeg et nyt problem. Måske du kan hjælpe mig?

Jeg har fået en opgave vedr. Hashset. som lyder på :
In this exercise you're going to use the java.util.Hashset Class for storage and retrival of data in files on a disk.

Problemet her når jeg tilføjer 3 instancer af Person til HashSet og vil skrive til file kommer denne her fejl :
Output:
The_Use_Of_Hashset.Person@1eed786
3.1415
The_Use_Of_Hashset.Person@19f953d
true
4910
The_Use_Of_Hashset.Person@1fee6fc
java.io.NotSerializableException:

Her er mit program
package The_Use_Of_Hashset;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Saver {

    private double PI;
    private boolean b = true;
    private int value;

    public Saver() {
        Person p1 = new Person("Peter", "010364-1777",
"188 cm");
        Person p2 = new Person("Poul", "231064-5641", "180 cm");
        Person p3 = new Person("Mary", "170765-4242", "161 cm");
        Set<Object> obj = new HashSet<Object>();
        obj.add(value = 4910);
        obj.add(PI = 3.1415);
        obj.add(b);
        obj.add(value = 491 * 10);
        obj.add(p1);
        obj.add(p2);
        obj.add(p3);

        // printing the obj
        Iterator<Object> itr = obj.iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next().toString());
        }
        try {
            FileOutputStream fos = new FileOutputStream("object", false);

            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(obj);
            oos.close();
        } catch (FileNotFoundException e) {
            System.out.println("Uable to write to Objects");
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}



package The_Use_Of_Hashset;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Loader {

    /**
    * @param args
    */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Saver save = new Saver();

        ObjectInputStream ois;
        try {
            ois = new ObjectInputStream(new FileInputStream("object"));
            try {
                @SuppressWarnings("unchecked")
                Set<Object> load = (HashSet<Object>) ois.readObject();

                System.out.println("Number of Elements " + load.size());

                Iterator<Object> itr = load.iterator();
                while (itr.hasNext()) {
                    System.out.println(itr.next());
                }

            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

package The_Use_Of_Hashset;

public class Person {

    private String Name;
    private String Cpr;
    private String height;

    public Person(String name, String cpr, String height) {

        Name = name;
        Cpr = cpr;
        this.height = height;
    }
}
Avatar billede arne_v Ekspert
27. august 2012 - 23:10 #4
java.io.NotSerializableException

siger at

public class Person {

skal vaere

public class Person implements Serializable {
Avatar billede Godfather75 Nybegynder
27. august 2012 - 23:36 #5
Tak for oplysningen det hjalp ihvertfald:) Men nu har jeg et nyt problem når jeg printer ud?

Her er mit program med ændring:
package The_Use_Of_Hashset;

import java.io.Serializable;

public class Person implements Serializable {

    private static final long serialVersionUID = 1L;
   
    private String Name;
    private String Cpr;
    private String height;

    public Person(String name, String cpr, String height) {

        Name = name;
        Cpr = cpr;
        this.height = height;
    }
}

package The_Use_Of_Hashset;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Saver {

    private Person peter = new Person("Peter", "010364-1777", "188 cm");
    private Person poul = new Person("Poul", "231064-5641", "180 cm");
    private Person mary = new Person("Mary", "170765-4242", "161 cm");
    public Saver() {

        Set<Object> obj = new HashSet<Object>();
       
        obj.add(new Integer(4910));
        obj.add(new Double(3.1415));
        obj.add(new Boolean(true));                                        //Adding the objects to the HashSet
        obj.add(new Integer(491*10));
        obj.add(peter);
        obj.add(poul);
        obj.add(mary);
       
       

        //printing the obj
    System.out.println("----Printing set----");
    for(Object o : obj)
        System.out.println(o.toString());
//        Iterator<Object> itr = obj.iterator();
//        while (itr.hasNext()) {
//            Object o = itr.next();
//           
//            System.out.println(o);
//        }
        if (obj.contains(peter)&& obj.contains(mary)){
            System.out.println("Person found");
        }else{
            System.out.println("Cannot find person");
        }
        try {
            FileOutputStream fos = new FileOutputStream("object", false);

            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(obj);
            oos.close();
        } catch (FileNotFoundException e) {
            System.out.println("Uable to write to Objects");
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

package The_Use_Of_Hashset;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Loader {

    /**
    * @param args
    */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Saver save = new Saver();

        ObjectInputStream ois;
        try {
            ois = new ObjectInputStream(new FileInputStream("object"));
            try {
                @SuppressWarnings("unchecked")
                Set<Object> load = (HashSet<Object>) ois.readObject();
                System.out.println();
                System.out.println("----Print the Loadet file <object.txt>----");
                System.out.println("Number of Elements in HashSet " + load.size());

                Iterator<Object> itr = load.iterator();
                while (itr.hasNext()) {
                    System.out.println(itr.next());
                }
               
           

            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
Min Output ser mærkelig ud?
---Printing set----
The_Use_Of_Hashset.Person@12dacd1
The_Use_Of_Hashset.Person@e48e1b
3.1415
true
4910
The_Use_Of_Hashset.Person@1ad086a
Person found

----Print the Loadet file <object.txt>----
Number of Elements in HashSet 6
The_Use_Of_Hashset.Person@1754ad2
3.1415
true
The_Use_Of_Hashset.Person@1833955
4910
The_Use_Of_Hashset.Person@e86da0

Hvad gør jeg forkert?
Avatar billede arne_v Ekspert
27. august 2012 - 23:43 #6
Hvis det er dem her:

The_Use_Of_Hashset.Person@12dacd1
The_Use_Of_Hashset.Person@e48e1b

du ikke kan lide, saa lav en toString metode i Person klassen.
Avatar billede Godfather75 Nybegynder
27. august 2012 - 23:46 #7
Jeg fandt fejlen! Jeg mangler min toString i Person.. Men ellers mange mange tak Arne_v
Avatar billede arne_v Ekspert
28. august 2012 - 00:12 #8
saa vil jeg smide et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester