2017-10-21 107 views
0

从其他类访问最终字段的好方法以及为什么。从其他类访问java的最终字段的正确方法

A)通过使私人并给予在所述吸气剂)的功能和设置方法

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

乙保持它默认和直接使用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

我喜欢你应该有在Racquet类中的方法来移动它,例如。向上移动,向下移动等。让方法在内部完成工作 – 2017-10-21 21:50:42

+0

请检查y = game.getRacquet()。getTopY() - DIAMETER;在A和y = game.getRacquet()。getTopY() - DIAMETER;在B – Gaurav

+0

在球类中你获得球拍(位置)的属性并减去直径。把球的位置传递给球拍,让方法完成这项工作,而不是调用getter – 2017-10-21 21:54:31

回答

1

而不是使用getter来移动球拍,最好是有一种方法可以为你在内部做。

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

或者,如果你愿意,分裂进军moveUpmoveDown等..和你通过直径后返回计算的值。这将取决于很多事情,例如球的位置。您可以检查球的位置并决定调用哪种方法并移动球拍。

这可能是最好的现实思考。

你可以有一个Player类:

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

在现实中你的Racket,就不会知道其中的Ball是,或者您使用Racket打它的Ball不会知道,Player是意识到这一点。

如果你想遵循OOP指导原则,那么不要直接访问变量(即public)而是让方法为你做好工作,并给你结果,这是一种方法Tell, Don't Ask。如有需要,请将吸气剂保存在显示器上。