我正在使用libgdx库制作游戏。我有一个名为World
的班级和一个名为WorldTile
的班级。
在World
类中,我创建了一个新的WorldTile
,Eclipse告诉我构造函数是未定义的,但确实如此。如果我采取"可能的纠正措施"要创建这样的构造函数,它会导致WorldTile
中出现重复方法的错误。
World.java
中的代码:
worldTile = new WorldTile(renderZone, TileImages.FLOOR_PLANK_YELLOW, TileImages.WALL_BRICK_GREEN, true);
WorldTile.java
中的代码:
public WorldTile(Position renderZone, int floorType, int wallType, boolean isHidden)
{
this.position = renderZone;
this.isHidden = true;
}
public WorldTile(Position renderZone, int floorPlankYellow,
int wallBrickGreen, boolean b)
{
// TODO Auto-generated constructor stub
}
第二个构造函数是由Eclipse构造的自动生成的,以表明我实际上编写了正确的构造函数,但Eclipse声称它不存在。
根据评论中的建议,我重新启动了Eclipse,这很有用。你试过把它关掉再打开吗?感谢所有的建议。
答案 0 :(得分:0)
由于两个构造函数具有相同的参数类型,因此编译器不知道要使用哪个构造函数。同一对象的不同构造函数必须具有不同的参数集。此外,如果您传入一段数据来构建对象,通常您希望实际使用该数据执行某些操作...
编辑:要快速修复,只需删除第二个构造函数。
EDIT2:因为我最近似乎误读了你的帖子......我的建议是确保你将相应的类型传递给构造函数。
答案 1 :(得分:0)
为类提供两个构造函数,参数类型必须不同。拥有两个构造函数
public MyClass(int a, int b) { // your code } along with
public MyClass(int c, int d) { // your code }
不会工作。因为两个构造函数都需要两个整数。所以Java不知道选择哪一个。你可以为一个类设置各种构造函数,因为它们的签名(methodName和parameterList的组合)不同。
所以
MyClass(int a, int b) { // your code } along with
MyClass(int a, int b, int c) { // your code }
完全没问题。明白为什么?
同样是mmitaru建议的,你通常想创建ie实例化一个对象并引用它以便你可以使用/操作它。
myObjType obj1; // declaration : obj1 should hold, so to say reference to objects of type myObjType
new myObjType(...) // actually creates such an object (where ... are the parameters the constructors expects)
myObjType obj1 = new myObjType(...) // declaration and initialization in a single step
obj1.aMethod() // calls the method aMethod on the object of type myObjType