2

ここでは、変数aで指定されたmain()プログラムで何らかの条件が満たされた後、オーバーロードされたコンストラクターを呼び出そうとしています。デフォルトのコンストラクターのみを使用している場合、コードは正常に機能しますが、ある時点でオーバーロードされたコンストラクターを呼び出す必要があり、失敗します。以下はコードです:

オーバーロードされたコンストラクター:

public Paddle(int a){

   if(a ==1){
       ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle1));
       image = ii.getImage();
   }
   else {
       ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle2));
       image = ii.getImage();
   }
    width = image.getWidth(null);
    height = image.getHeight(null);
  resetState();
  }

//      further initialization --

デフォルトのコンストラクター:

 public Paddle(){

        ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle));
        image = ii.getImage();

        width = image.getWidth(null);
        height = image.getHeight(null);
        System.out.println(height+" "+width);
        resetState();
 }

事前に助けてくれてありがとう、さらに質問をすることができますが、このコードにはいくつか問題があると思います。ありがとうございました

4

1 に答える 1

4

答え

imageオーバーロードされたコンストラクターでインスタンス変数を設定していません。

正しい方法

あなたのやり方はDRY (Don't Repeat Yourself) に違反しています!

最善の方法は、no argコンストラクターにオーバーロードされたコンストラクターを呼び出してから、インスタンス変数imageを 1 か所で設定することです。

public Paddle(final int i) 
{ 
   if (i==1) { this.image = one thing } 
   else 
   { this.image = another thing } 
}

public Paddle() { this(0); }

より良い方法は、すべてのコードを表示せずに、リソースを 1 つのコンストラクターに渡して処理を完了することです。これは非常に複雑に見えます。

于 2012-06-25T20:34:21.150 に答える