这里我试图在我的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();
}
提前感谢您的帮助,可以询问进一步的查询,但我认为这段代码存在一些问题。谢谢
答案 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); }
更好的方法是将资源传递给单个构造函数并完成它,而不会看到所有代码,这看起来过于复杂。