如果这个标题没有正确描述问题,我很抱歉,但我不确定如何描述它。
我有一个名为changeToWhite()
的方法,可以在Piece上调用
例如Piece.changeToWhite()
但是为了能够将这件作品更改为白色,我需要访问该作品,所以我决定将其作为参数传递
例如Piece.changeToWhite(Piece)
作为参数传入似乎是不必要的。
toUpperCase()
函数以某种方式执行此操作,例如someString.toUpperCase()
我该怎么做?
答案 0 :(得分:9)
如果在changeToWhite
类上定义Piece
,则在实例上可以使用this
来获取对当前对象的引用。类似的东西:
class Piece {
private String color;
...
public void changeToWhite() {
this.color = 'white';
}
}
请注意,在类上定义方法时,需要使用实例来调用方法。
所以
Piece piece1 = new Piece();
piece1.changeToWhite();
请注意,Java标准是使用大写字母来定义类(例如Piece
)和驼峰大小写(例如changeToWhite
),例如方法和字段。
其他方法是使用静态方法。在这种情况下,该方法属于该类,它没有像实例方法那样的this
上下文
class Piece {
private String color; // instance field
/**
Takes a piece instance as an argument, and operates on that.
*/
private static void changeToWhite(Piece piece) {
piece.setColor('white'); // assume setColor exists
}
}
但第一种方式更可取。
答案 1 :(得分:3)
这是静态方法和实例方法之间的区别。在您的示例中,调用Piece.changeToWhite()
是一个静态方法,但您正在尝试访问实例变量(片段的类型)。
您有两种选择:
Piece p1 = new Piece(); p1.changeToWhite();