Métodos y Composición java

Tengo un motor de fachada con un método.

getOwner() 

También tengo otra clase llamada Coche y otra llamada Propietario. La clase Car también tiene un método getOwner() mientras que la clase Owner contiene el nombre, el costo del auto y el presupuesto del propietario.

Así que tengo un método para inicializar el motor y esto llama al constructor en la clase newCARengine.

public static void iniEngine(String name, int cost) {
    model = new newCARengine(name, cost);
}

Composición. La clase de motor tiene un automóvil y la clase de automóvil tiene un propietario. Para llamar con éxito al método getOwner(), necesito usar variables de instancia (variable de nivel de clase) para mantener una referencia al otro objeto para llamar a ese método desde ese objeto.

MI CLASE DE MOTOR: [abajo]

public class engine{
    private String name;
    private int cost;
    public Car car;

    public engine(String name, int cost){
        this.name = name;
        this.cost = cost;
    }

   public Owner getOwner(){
        return car.getOwner();
    }
}

Hago referencia a la clase Car usando una variable de instancia para esa clase "automóvil público"; lo que me permite usar "car.getOwner();" método.

MI CLASE DE COCHE: [abajo]

public class Car{
    public Owner owner //instance variable to reference the owner class
    public Owner getOwner(){
        return owner;
    }
}

Ahora estoy listo para ir a la clase Propietario donde se crea el objeto Propietario.

MI CLASE DE PROPIETARIO: [abajo]

public class Owner{
    private String name;
    private int cost;
    private int budget;

    public Owner (String name, int cost){
        this.name = name;
        this.cost = cost;
    }
    public Owner (String name, int cost, int budget){
        this.name = name;
        this.cost = cost;
        this.budget = budget;
    }
    public String getName(){return name;}
    public int getCost(){return cost;}
    public int getBudget(){return budget;}
}

Ahora estoy haciendo algo mal, ya que cuando ejecuto el método iniEngine(), obtengo una excepción de puntero nulo y creo que esto es el resultado de que el objeto no se creó. El error se genera desde aquí:

return car.getOwner();  //from the ENGINE CLASS

Necesito devolver un objeto como resultado de mi clase de motor. pero el objeto no se crea. Cualquier ayuda sería apreciada.

preguntado el 30 de junio de 12 a las 17:06

A mi modo de ver, el "dueño" del motor es el auto mismo, no el dueño del auto. -

¿Dónde estás configurando el campo? car a partir de su engine ¿ejemplo? -

3 Respuestas

Revisé tu código varias veces. No entiendo donde asocias un dueño a un auto.
Esto es lo que causa la NullPointerException
Le sugiero que proporcione un CTOR a Car que obtenga Owner como parámetro y, además, considere tener un método setCar.

Considere usar el siguiente código para Car:

public class Car{
    public class Car(Owner owner) {
      this.owner = owner;
    }
    private Owner owner //instance variable to reference the owner class

    public void setOwner(Owner owner) {
       this.owner = owner;
    }
    public Owner getOwner(){
        return owner;
    }
}

Respondido el 30 de junio de 12 a las 18:06

Nota de estilo: en Motor, el automóvil probablemente también debería estar private, al igual que los otros campos, con un argumento setter o constructor.

Parece que algunos de los campos no se están configurando. Un "truco" de depuración que uso en casos similares es hacer que los campos final, y vea de qué se queja el compilador. Por ejemplo, si alguien está configurando engine.car, se quejaría. En este caso, eso es algo bueno, ¡debería ser una queja! Y si nadie está estableciendo engine.car, esa es una señal de alerta sobre el origen de la NPE.

Alternativamente, si tiene setters/getters, coloque puntos de interrupción en ellos (o, si lo prefiere, agregue System.out.prints) para verificar que se les llame. O cámbieles el nombre temporalmente (agrego "xxx" al principio) para verificar que el compilador se queje, demostrando que alguien los está llamando.

Respondido el 30 de junio de 12 a las 18:06

Nunca instalé los objetos y solo delcaré las variables.

Cambiando el constructor a

public Engine(String name, int cost) {
    car = new Car(new Owner(name, cost));       
}

Esto creó los objetos con éxito, lo que a su vez me permitió llamar al método getOwner() y no obtener NullPointerExceptions. Debe haberse perdido esta parte de alguna manera.

Respondido 02 Jul 12, 18:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.