0

メソッド付きのファサードエンジンがあります

getOwner() 

また、Carという別のクラスと別の発信者の所有者がいます。CarクラスにはgetOwner()メソッドもあり、Ownerクラスには名前、車のコスト、所有者の予算が含まれています。

したがって、エンジンを初期化するメソッドがあり、これによりnewCARengineクラスのコンストラクターが呼び出されます。

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

構成。エンジンクラスには車があり、車クラスには所有者がいます。getOwner()メソッドを正常に呼び出すには、インスタンス変数(クラスレベル変数)を使用して、そのオブジェクトからそのメソッドを呼び出すために、他のオブジェクトへの参照を保持する必要があります。

私のエンジンクラス:[下]

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

そのクラス「publicCarcar;」のインスタンス変数を使用して、Carクラスを参照しています。これにより、「car.getOwner();」を使用できるようになります。方法。

私の車のクラス:[下]

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

これで、Ownerオブジェクトが作成されるOwnerクラスに移動する準備ができました。

私の所有者クラス:[下]

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

iniEngine()メソッドを実行すると、nullpointer例外が発生します。これは、オブジェクトが作成されていない結果であると信じています。エラーはここから生成されます:

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

エンジンクラスの結果としてオブジェクトを返す必要があります。しかし、オブジェクトは作成されていません。どんな援助もいただければ幸いです。

4

3 に答える 3

0

スタイル ノート: Engine では、おそらく car もprivate、他のフィールドと同様に、セッターまたはコンストラクター引数のいずれかを持つ必要があります。

一部のフィールドが設定されていないようです。同様のケースで私が使用するデバッグの「トリック」の 1 つは、一時的にフィールドを作成しfinal、コンパイラが文句を言うことを確認することです。たとえば、誰かが を設定engine.carしている場合、文句を言うでしょう。この場合、それは良いことです - それは不平を言うべきです! そして、誰もを設定していない場合engine.car、それは NPE がどこから来ているかについての危険信号です。

または、セッター/ゲッターがある場合は、それらにブレークポイントを配置 (または、必要に応じて System.out.prints を追加) して、それらが呼び出されていることを確認します。または、一時的に名前を変更して (最初に "xxx" を追加します)、コンパイラがエラーを出して、誰かがそれらを呼び出していることを証明することを確認します。

于 2012-06-30T17:35:55.810 に答える
0

私はあなたのコードを数回見直しました。所有者を車に関連付ける場所がわかりません。
これが NullPointerException の原因
です。所有者をパラメーターとして取得する CTOR を Car に提供し、さらに setCar メソッドを使用することを検討することをお勧めします。

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;
    }
}
于 2012-06-30T17:03:51.763 に答える