2

在这里,我试图在我的 main() 程序中满足某些条件后调用重载的构造函数,该条件由变量 a 给出。当我只使用默认构造函数时,代码工作正常,但我需要在某些时候调用重载构造函数,但它会失败。以下是代码:

重载构造函数:

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(不要重复自己)!

最好的方法是让no arg构造函数调用重载的构造函数,然后将实例变量设置image在一个地方。

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

public Paddle() { this(0); }

更好的方法是将资源传递给单个构造函数并完成它,而无需查看所有代码,这看起来过于复杂。

于 2012-06-25T20:34:21.150 回答