2017-10-21 1 views
0

他のクラスの最終フィールドにアクセスする良い方法は何ですか?javaの最終フィールドに他のクラスからアクセスするための正しい方法

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

私はあなたがそれを移動するために、ラケットのクラスでメソッドを持っているのが好きです。上に移動する、下に移動する、などメソッドが内部的に仕事をするようにする –

+0

y = game.getRacquet()。getTopY() - DIAMETER; Aとy = game.getRacquet()。getTopY() - DIAMETER; B – Gaurav

+0

ボールクラスではラケット(位置)の属性を取得し、直径を減算します。ボールの位置をラケットに渡して、ゲッターを呼び出すのではなく、そのメソッドが仕事をするようにします。 –

答えて

1

ゲッターを使用してラケットを移動する代わりに、内部的に行う方法があるのが最善です。

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のガイドラインに従う場合は、変数に直接アクセスしないでください(例:public)。代わりにメソッドがあなたに代わって結果を返すようにします。メソッドはTell, Don't Askです。必要に応じて表示用にゲッターを保管してください。

関連する問題