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

从其他类访问java中最终字段的正确方法,java,performance,oop,final,Java,Performance,Oop,Final,从其他类访问最终字段的好方法是什么?为什么 通过使其私有并在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) {

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

通过使其私有并在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保持默认值,并直接使用变量.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;
 }
}

访问最终字段是否会直接提高性能

与其用吸气剂来移动球拍,不如用一种方法让它在内部为你做这件事

void move(int speed) {
  if (collision()) {
    racket.move(diameter)
   } 
}
//inside racket
public int move(int diameter){
    return this.Y - diameter;
}
或者,如果您愿意,可以将移动拆分为向上移动、向下移动等。。并在传递直径后返回计算值。这将取决于许多因素,例如,球的位置。你可以检查球的位置,并决定用哪种方法呼叫和移动球拍

最好现实地考虑一下

您可以有一个玩家类:

负责确定球的位置。 移动球拍 事实上,你的球拍不会意识到球在哪里,或者球不会意识到你用球拍击球,球员也会意识到


如果您想遵循OOP准则,那么不要直接访问变量i.e public,而是让方法为您完成工作,并给出结果,这是一种方法。如果需要,保留getter用于显示

我喜欢你应该在网拍类中有方法来移动它,例如,向上移动,向下移动,等等。让方法在内部完成工作。请检查线y=game.getracket.getTopY-DIAMETER;在A和y中=game.getracket.getTopY-直径;在球类中,你可以得到球拍位置属性并减去球拍直径。把球的位置传给球拍,让球拍的方法去做,而不是叫接球手。你基本上是在问接球手或接球手,答案是没关系。getter是内联的,不需要任何费用。争取好的设计首先看S.R的答案,避免直接或间接地与其他对象的字段混在一起,使用适当的算法和数据结构,性能就在那里。微优化有时很有用,但这是最后一步。