从其他课程访问最终字段的好方法是什么?为什么?
A)将其与其他类隔离,方法是将其设置为私有并在getter和setter方法中提供功能
public class Game extends JPanel {
private final Racquet racquet;
public Game() {
racquet = new Racquet(this);
}
}
public class Ball {
private Game game;
Ball(final Game game) {
this.game = game;
}
void move(int speed) {
if (collision()) {
y = game.getRacquet().getTopY() - DIAMETER;
}
}
}
public class Racquet {
final Game game;
public Racquet(final Game game) {
this.game = game;
}
public int getTopY() {
return Y;
}
}
B)保持默认并直接使用variable.methodname。
public class Game extends JPanel {
final Racquet racquet;
}
public class Ball {
void move(int speed) {
if (collision()) {
y = game.racquet.getTopY() - DIAMETER;
}
}
}
public class Racquet {
final Game game;
public Racquet(final Game game) {
this.game = game;
}
public int getTopY() {
return Y;
}
}
直接访问最终字段可以提高性能吗?
答案 0 :(得分:1)
最好不要使用getter来移动Racket,最好有一个方法在内部为你做。
void move(int speed) {
if (collision()) {
racket.move(diameter)
}
}
//inside racket
public int move(int diameter){
return this.Y - diameter;
}
或者如果您愿意,可以将移动拆分为moveUp
,moveDown
等,并在传递直径后返回计算值。这将取决于许多事情,例如球的位置。你可以检查球的位置,并决定调用哪种方法并移动球拍。
最好现实地考虑一下。
您可以拥有Player
课程:
实际上,您的Racket
不会知道Ball
的位置,或Ball
不会意识到您使用Racket
来点击它,Player
知道它。
如果你想遵循OOP指南,那么不要直接访问变量(即公共),而是让方法为你工作,并给你结果,这是Tell, Don't Ask的方法。如果需要,保留吸气剂用于显示目的。