많은이 있습니다
이에 말 (변경하려는 속성이 "개인"키워드를 가지고 있기 때문에), 당신은
public void setTxtField1Value(String newValue){
this.txtField1.value=newValue; // using the right method in api. I am not familiar with gui..
}
다음 B에, 방법이 될 것이다있다 당신이 이것을 달성 할 수있는 방법. 가장 간단한 클래스 B의 방법으로 개체를 전달하는 것입니다 :
public void doSomething(JTextField fieldToUpdate){
//your logic here
fieldToUpdate.setText("something");
}
그런 다음 당신은 그냥 직접
fieldToUpdate
를 업데이트 할 수 있습니다. 이것은 1 클래스가 소유 한 변수의 제어를 다른 클래스에 직접 노출하기 때문에 좋은 디자인 패턴이 아닙니다.
또 다른 대안은 공공 방법을 방법으로 클래스 A의 인스턴스를 전달하고 호출하는 것입니다 :
이
public void doSomething(A aInstance){
//your logic here
aInstance.setText("something");
}
다음 클래스 A에서 당신이
public void setText(String text){
txtField1.setText(text);
}
입니다 정의해야 할 것 클래스 B는 클래스 A의 내부에 직접 액세스 할 수 없으므로 조금 더 좋아집니다.
더 많은 캡슐화 된 응답 (이 간단한 경우에 잔인 함에도 불구하고)은
public class A implements TextDisplayer{
public void setText(String txt){
txtField1.setText(txt);
}
}
후 인터페이스 :
public interface TextDisplayer{
public void setText(String txt);
}
클래스 A에서 다음
public void doSomething(TextDisplayer txt){
//your logic here
txt.setText("something");
}
미세한 페스 및 클래스 B의 방법에 대한 인터페이스를 구현하는 클래스의 인스턴스를 전달할
이 접근법의 장점은 클래스 B가 클래스 A와 완전히 분리되어 유지된다는 것입니다. 관심있는 것은 setText 메소드를 처리하는 방법을 알고있는 것이 전달된다는 것입니다. 다시 말하지만,이 경우에는 아마도 과도한 행동 일 수 있습니다.하지만 가능한 한 클래스의 분리를 유지하는 방식입니다.
답변 해 주셔서 감사합니다. aInstance가 루프 내부에 있다면 어떻게 될까요? setText 메서드에서 doSomething 메서드로 반환하는 방법을 확인하려면 어떻게해야합니까? – jadrijan