2017-10-21 9 views
0

다른 클래스의 최종 필드에 액세스하는 좋은 방법은 무엇입니까? 비공개 만드는 그것은 기본적으로 직접 variable.methodname을 사용하여 유지하여 게터의 기능과 세터 방법다른 클래스의 java에서 최종 필드에 액세스하기위한 올바른 방법

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)를 제공하여 다른 클래스에서 격리를

A).

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 클래스에서 메소드를 이동해야합니다. 예. 위로 이동, 아래로 이동, 등등. 메소드가 내부적으로 작업을 수행하게하십시오. –

+0

y = game.getRacquet(). getTopY() - DIAMETER; A와 y = game.getRacquet(). getTopY() - DIAMETER; in B – Gaurav

+0

볼 클래스에서 라켓 (위치) 속성을 가져 와서 지름을 뺍니다. 공의 위치를 ​​라켓에 건네고 메서드가 게터를 호출하는 대신 작업을 수행하도록하십시오. –

답변

1

게터를 사용하여 라켓을 이동하는 대신 내부적으로 수행하는 방법을 사용하는 것이 가장 좋습니다.

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가 어디 있는지 알 수 없습니다, 또는 충돌하는 Racket를 사용하여 Ball가 인식되지 않을 것이라고 Player는 알고있다 .

    OOP 가이드 라인을 따르고 싶다면 직접 변수에 액세스하지 말고 (예 : public) 대신에 메소드를 사용하여 결과를 얻으십시오.이 메소드는 Tell, Don't Ask입니다. 필요한 경우 게터를 표시 목적으로 유지하십시오.