2012-06-30 4 views
0

나는 방법방법 및 구성 자바

getOwner() 
나는 또한 자동차라는 다른 클래스가

다른 발신자 소유자와 외관 엔진을 가지고있다. Car 클래스에는 getOwner() 메서드가 있으며 Owner 클래스에는 자동차의 이름, 비용 및 소유자 예산이 들어 있습니다.

그래서 엔진을 초기화하는 메소드가 있으며 newCARengine 클래스의 생성자를 호출합니다.

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

조성. 엔진 클래스에는 자동차가 있고 자동차 클래스에는 소유자가 있습니다. getOwner() 메서드를 성공적으로 호출하려면 인스턴스 변수 (클래스 수준 변수)를 사용하여 해당 개체에서 해당 메서드를 호출하기 위해 다른 개체에 대한 참조를 보유해야합니다.

MY 엔진 클래스 : [아래]

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(); 
    } 
} 

내가 그 클래스의 인스턴스 변수를 사용하여 Car 클래스를 참조하고있어 "공공 자동차 자동차;" 그러면 "car.getOwner();"를 사용할 수 있습니다. 방법.

MY CAR의 등급 (class) : [아래]는

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

는 지금은 소유자의 객체가 생성 소유자 클래스에 갈 준비 해요.

MY 소유자의 등급 (class) : [아래] 지금 내가 iniEngine() 메소드를 실행하는 경우와 같이 뭔가 잘못하고있는 중이 야

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;} 
} 

, 나는 nullpointer 예외를 얻을 내가 보라,이 오브젝트의 결과 아니다 창조되고있다. 여기에서 오류가 발생합니다.

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

엔진 클래스 결과로 개체를 반환해야합니다. 개체가 생성되지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

내 생각에 엔진의 "주인"은 차의 소유자가 아니라 차 자체입니다. –

+1

'engine' 인스턴스에서'car' 필드를 어디에 설정하고 있습니까? –

답변

0

코드를 여러 번 검토했습니다. 나는 당신이 자동차에 주인을 연관시키는 곳을 이해하지 못합니다.
이것은 NullPointerException의 원인입니다.
매개 변수로 소유자를 가져 오는 자동차에 CTOR를 제공하고 setCar 메서드가 있다고 생각해보십시오.

는 자동차에 대해 다음 코드를 사용하여 고려하십시오

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; 
    } 
} 
0

스타일 참고 : 엔진에, 자동차는 아마도 세터 또는 생성자의 인자 중 하나와 함께, 단지 다른 필드처럼 private을해야합니다.

일부 필드가 설정되지 않는 것 같습니다. 비슷한 경우에 사용하는 디버깅 "트릭"중 하나는 필드를 임시적으로 final으로 만들고 컴파일러가 불평하는 부분을 확인하는 것입니다. 예를 들어 누군가가 engine.car으로 설정하면 불만을 제기합니다. 이 경우, 그것은 좋은 것입니다 - 불평해야합니다! 그리고 아무도engine.car으로 설정되어 있으면 NPE가 어디에서 왔는지를 나타내는 빨간색 플래그입니다.

setters/getters가있는 경우 중단 점을 넣거나 원하는 경우 시스템을 추가하십시오.out.prints)를 호출하여 전화를 받았는지 확인합니다. 또는 일시적으로 이름을 바꾸고 (필자는 "xxx"를 처음에 추가 함) 컴파일러가 불평하는지 확인하여 누군가가 호출하고 있음을 증명합니다.

0

개체를 인스턴스화 한 적이 없으며 변수 만 delcared했습니다.

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

에 생성자를 변경하여

이 차례로 나를 cat에 대해 getOwner() 메서드를 호출하고 NullPointerExceptions를 얻지 할 수있는 성공적으로 개체를 만들었습니다. 이 부분을 어떻게 든 놓쳐 야 했어.