Java - Problemas en un constructor de copia

   
Vista:

Problemas en un constructor de copia

Publicado por jesus jespenas@hotmail.com (2 intervenciones) el 07/10/2015 20:13:35
Tengo estas dos clases y al ejecutar el main me da un error al llamar al constructor de copia y me da este error:
1
2
3
4
Exception in thread "main" java.lang.NullPointerException
	at java.util.AbstractCollection.addAll(Unknown Source)
	at practica4.BolsaMod.<init>(BolsaMod.java:13)
	at practica4.BolsaMain.main(BolsaMain.java:12)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package practica4;
 
import java.util.*;
 
public class BolsaMod<E> extends AbstractCollection<E> implements Collection<E> {
protected LinkedList<E> data;
public BolsaMod(){
	data=new LinkedList<E>();
}
 
public BolsaMod(Collection <? extends E> c){
	this();
this.addAll(c);
 
 
 
}
@Override
public boolean add(E e){
	return data.add(e);
}
public boolean esVacia(){
	return data.isEmpty();
}
public boolean remove(Object o){
	return data.remove(o);
}
	@Override
	public Iterator<E> iterator() {
		// TODO Auto-generated method stub
		return null;
	}
 
	@Override
	public int size() {
		// TODO Auto-generated method stub
		return data.size();
	}
 
	@Override
	public String toString () {
		String cad = "( ";
 
		for (E x : data) {
			if (x instanceof String) {
				cad += "\"" + x.toString() + "\" ";
			}
			else {
				cad += x.toString() + " ";
			}
		}
 
		return cad + ")";
	}
	@SuppressWarnings("unchecked")
	public boolean equals (Object o) {
        if (o == this)
            return true;
 
        if (! (o instanceof BolsaMod))
            return false;
 
        if (this.size() !=((BolsaMod<E>) o).size()) {
        	return false;
        }
 
 
        return data.equals(((BolsaMod<E>) o).data);
	}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package practica4;
 
public class BolsaMain {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BolsaMod<String> b=new BolsaMod<String>();
		b.add("4");
		b.add("7");
		b.add("67");
System.out.println(b);
BolsaMod<String> b1=new BolsaMod<String>(b);//aqui da el error
//BolsaMod<String> b1=new BolsaMod<String>();
b1.add("4");
 
b1.add("67");
b1.add("7");
System.out.println(b1);
if (b.equals(b1))
	System.out.println("Iguales");
else System.out.println("No Iguales");
 
	}
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas en un constructor de copia

Publicado por Tom (914 intervenciones) el 08/10/2015 17:22:25
Podría ser, no lo aseguro, que tu problema esté en que BolsaMod no sobreescribe addAll(), así que llamará a AbstractCollection.addAll(). Pero podrías tener problemas al no inicializar AbstractCollection.

Yo probaría:

1
2
3
4
5
6
public BolsaMod(){
        super();
 
	data=new LinkedList<E>();
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas en un constructor de copia

Publicado por Tom (914 intervenciones) el 08/10/2015 20:31:03
Ah no !!
Lo que te ocurre es que BolsaMod.iterator() retorna null.
Cuando haces new BolsaMod<String>(b) el constructor llama a AbstractCollection.addAll() y ese método necesita iterar sobre la lista que le has pasado (b). Como el iterador devuelto es null, se eleva la excepción.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas en un constructor de copia

Publicado por jesus (2 intervenciones) el 10/10/2015 09:43:10
Muchas gracias Tom.
El problema era que el metodo iterator() estaba mal, retornaba null, ahora ya esta bien.
1
2
3
4
5
@Override
public Iterator<E> iterator() {
	// TODO Auto-generated method stub
	return data.iterator();
}.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar