从其他类访问java中的最终字段的正确方法

时间:2017-10-21 21:30:14

标签: java performance oop final

从其他课程访问最终字段的好方法是什么?为什么?

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;
 }
}

直接访问最终字段可以提高性能吗?

1 个答案:

答案 0 :(得分:1)

最好不要使用getter来移动Racket,最好有一个方法在内部为你做。

void move(int speed) {
  if (collision()) {
    racket.move(diameter)
   } 
}
//inside racket
public int move(int diameter){
    return this.Y - diameter;
}

或者如果您愿意,可以将移动拆分为moveUpmoveDown等,并在传递直径后返回计算值。这将取决于许多事情,例如球的位置。你可以检查球的位置,并决定调用哪种方法并移动球拍。

最好现实地考虑一下。

您可以拥有Player课程:

  • 负责确定球的位置。
  • 移动球拍

实际上,您的Racket不会知道Ball的位置,或Ball不会意识到您使用Racket来点击它,Player知道它。

如果你想遵循OOP指南,那么不要直接访问变量(即公共),而是让方法为你工作,并给你结果,这是Tell, Don't Ask的方法。如果需要,保留吸气剂用于显示目的。