Estoy creando una matriz en la que cada elemento de la matriz es una lista enlazada de cadenas. DEBO usar la siguiente implementación:
Cree una clase que envuelva un objeto LinkedList (y también amplíe una clase determinada) y haga que cada elemento de la matriz sea una instancia de esta clase. Me dan la siguiente clase que necesito extender (que no puedo cambiar, y DEBO usar):
public Class1{ java.util.Collection<java.lang.String> collection; Class1(java.util.Collection<java.lang.String> collection){ this.collection = collection; } public void add(String str) { collection.add(str); }y Class1 tiene un par de métodos más relacionados con la colección (eliminar, etc.). Quiero crear una clase que amplíe Class1 y envuelva un objeto LinkedList. Quiero que esta clase cumpla con dos requisitos:
Así que esto es lo que hice:
public class Bucket extends Class1 { LinkedList<String> linkedList; Bucket(){ super(new LinkedList<String>()); } public String getFirst(){ linkedList.getFirst(); } }Tengo una clase principal que intenta ejecutar el siguiente código
Bucket bucket = new Bucket(); bucket.add("5"); bucket.getFirst();Esto cae en la línea bucket.getFirst(), porque obviamente la lista vinculada en la clase Bucket es nula, no es el objeto LinkedList que envié a Class1, por lo que el método getFirst() en Bucket está tratando de operar en nulo .
¿Como puedo resolver esto? ¿Cómo puedo conectar la LinkedList que envío a Class1 con la LinkedList que tengo en la clase Bucket? Gracias por leer hasta ahora.
Sí, en su código actual, linkedList dentro de la clase Bucket no apunta a ningún objeto , por lo que arroja java.lang.NullPointerException , por lo que para resolver el problema, puede seguir el siguiente enfoque:
Básicamente, una LinkedList IS-A Collection , por lo que simplemente puede encasillar el objeto de collection (de la superclase Class1 ) al objeto linkedList y return el primer elemento como se muestra a continuación:
public class Bucket extends Class1 { LinkedList<String> linkedList; public Bucket(){ super(new LinkedList<String>()); //now typecast and assign collection to linkedList linkedList = (LinkedList<String>)collection; } public String getFirst() { return linkedList.getFirst(); } }