Java:无法调用重载的构造函数

时间:2012-06-25 20:30:04

标签: java constructor

这里我试图在我的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();
 }

提前感谢您的帮助,可以询问进一步的查询,但我认为这段代码存在一些问题。谢谢

1 个答案:

答案 0 :(得分: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); }

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