AnotherObject xRef = new AnotherObject();
어떻게 인스턴스의 AnotherObject는 aRef 참조를 사용하여 SomeObject의 메소드에 액세스합니까? SomeObject의 동일한 인스턴스를 사용하려면
AnotherObject xRef = new AnotherObject();
어떻게 인스턴스의 AnotherObject는 aRef 참조를 사용하여 SomeObject의 메소드에 액세스합니까? SomeObject의 동일한 인스턴스를 사용하려면
을 원래 SomeObject
으로 인스턴스화하지 않는 이유는 무엇입니까?
// final used to avoid misreferencing variables and enforcing immutability
private final SomeObject obj;
public AnotherObject(final SomeObject obj) {
this.obj = obj;
}
그래서 AnotherObject
이전에 SomeObject
생성에 대한 참조를 가지고 같은
SomeObject obj = new SomeObject();
AnotherObject obj2 = new AnotherObject(obj);
및 AnotherObject
이 보일 것이다. 그런 다음이 참조를 사용하여 메소드를 호출 할 수 있습니다. 원래 개체가 AnotherObject
범위를 벗어나서 필요하지 않은 경우 AnotherObject
안에 만들고 원래대로 캡슐화하십시오. SetSomeObject가
public void SetSomeObject(SomeObject obj)
{
obj.DoStuff();
}
같은 특성을 가지며 유형 AnotherObject
의 멤버 함수
xRef.SetSomeObject(aRef);
.
전략 디자인 패턴과 데코레이터 디자인 패턴은이 작업을 수행 할 수있는 두 가지 방법입니다.
예를 들어 당신이 할 수 있습니다 :
class AnotherObject
{
private SomeObject mySomeObject;
public AnotherObject(SomeObject mySomeObject)
{
this.mySomeObject = mySomeObject;
}
function doSomethingUsingStrategy()
{
mySomeObject.doItTheMySomeObjectWay();
}
function setMySomeObject(SomeObject mySomeObject)
{
this.mySomeObject = mySomeObject;
}
}
을 그리고 나중에, 다른 전략을 사용할 수 있습니다
myAnotherObject.setMySomeObject(new ExtendsSomeObject);
myAnotherObject.doSomethingUsingStrategy()
나는 당신이 요구하는 것은 범위에 대한 질문이라고 생각합니다. 실행 중에 xRef가 aRef를 사용하는 방법을 묻고 있습니까? 대답은 AREF 참조가이
xRef = new AnotherObject(aRef)
또는 인스턴스 후 가질 수를 인스턴스화 될 때 외부 참조 객체에 전달 될 필요가 있다는 점이다
xRef.setSomeObject(aRef)
예 범위에 대한 질문입니다. 예를 들어, main 메소드는 클래스의 인스턴스를 생성하고 그 뮤 테이터 메소드를 사용하고, 또한 그 뮤 테이터 메소드를 사용해야하는 또 다른 클래스의 인스턴스를 생성한다. 덕분에 – Kari
AnotherObject는을 가진 멤버 또는 속성이 없습니다 SomeObject의 유형? 그것은 이것을 처리하는 또 다른 방법이 될 것입니다. AnotherObject 클래스의 "SomeObjectMember"회원이 있다면
그래서 : AnotherObject xRef = new AnotherObject(aRef)
또는 사용 setter 메소드 :
xRef.SomeObjectMember = aRef;
당신은 AnotherObject
중 하나를 생성자의 인스턴스 레프에 대한 참조를 제공해야 xRex.setSomeObject(aRef)
.내부적으로 사용할 수 레프를 저장하기 위해 인스턴스 변수를 가질 필요가 AnotherObject
이 경우 같은 : 또한 xRef.doSomethingWithSomeObject(aRef)
처럼 그들을 필요로 AnotherObject
에 방법에 SomeObject
의 인스턴스를 전달할 수
class AnotherObject {
SomeObject aRef;
public AnotherObject(SomeObject aRef) {
this.aRef = aRef;
}
public void doSomethingWithSomeObject() {
aRef.doSomething();
}
}
.
class AnotherObject {
public void doSomethingWithSomeObject(SomeObject aRef) {
aRef.doSomething();
}
}
(다른 사람들이 지적한 것처럼) 여러 가지 방법이 있습니다. 그래도 객체 구조에 대해 생각하고 싶다면 ...
아마도 주요 메소드는 aRef를 인스턴스화하지 않아야합니다. 아마도 xRef의 생성자에서 인스턴스화되어야합니다 (xRef가 " "아 레프.
의 기능의 레프는 외부 참조 방법을 사용할 때마다 그것을 통과 할 수 있습니다, 당신은 전혀를 저장할 수 없습니다 어떤 점에서 여러 인스턴스를 할 수 있습니다.
이를 비즈니스 논리 수준에서 개체 모델을 고려해야 할 곳입니다. 개체 간의 관계는 무엇입니까?
(제 추측에 따르면 xRef가 aRef를 인스턴스화하고 참조 자체를 유지하기를 원한다면 "주"가 aRef와 실제로 대화해야 할 경우 xRef에게 xRef에 메시지를 전달하거나 xRef에 aRef의 인스턴스를 요청할 수 있습니다.)
. 논리는 이것입니다 : main 메소드는 클래스의 인스턴스를 생성하고 그것의 뮤 테이터 메소드를 사용하여 데이터를 설정 한 다음, 어떤 시점에서 그 뮤 테이터 메소드를 사용해야하는 또 다른 클래스의 인스턴스를 생성합니다. – Kari
두 객체는 무엇을 나타내는가? ? 개들? 나무? 데이터베이스? 계산을위한 피연산자? 서로 다른 두 대상 사이의 관계는 무엇입니까? 다른 사람이 첫 번째 사실을 알지 못해도 상대방을 사용하기 때문에 그들은 동급생이 아닙니다. 왜 당신은 main에 두 객체를 모두 생성해야합니까? 다른 곳에 사용할 수없는 메인에 몇 가지 정보가 있습니까? –
이상하게 보입니다. 그러나 이러한 질문에 대답하고 이와 같은 관계를 생각하면 OO 모델이 성장하고 변형 될 때 사용할 수있게 만드는 것입니다. 그렇지 않으면 객체가 쓸모가 없습니다. –
ref를 전달한 다음이를 수행해야합니다. 메인 방법
public static void main(String [] args) {
SomeObject xRef = new SomeObject();
AnotherObject aRef = new AnotherObject();
// pass the ref...
aRef.setSomeObject(xRef);
// use it
aRef.doSomethingWithSomeObject();
}
에서 다음과 같이 사용할 수 있습니다
class AnotherObject {
SomeObject someObject;
public void setSomeObject(SomeObject some) {
this.someObject = some;
}
public void doSomethingWithSomeObject() {
this.someObject.someMethod();
}
..... rest of your code
}
그 방법은 당신이 무엇을 필요가 있습니까?
그의 질문에 대한 대답은 첫 번째 클래스를 정적 클래스로 만드는 것입니다.
내가 한 것은 정적 인 것으로서 첫 번째 클래스의 필드를 설정하고 접근 자 및 변경자 메서드를 public으로 설정했습니다. 그런 식으로 동일한 클래스의 두 인스턴스를 만들 수 있지만 데이터는 동일합니다. 그러나 나는 그것을하는 더 좋은 방법이있을 것이라고 생각했습니다! – Kari
발신자가 쉽게 할 수있는 일을 누군가에게 요청하는 것은 매우 이상합니다. 특히 "setter"를 의미하는 이름을 가진 메소드에서 (주어진 참조 또는 객체를 비공개 필드 중 하나에 할당 할 때) – Dmitry
true. 나는 대상 객체에 참조를 전달하는 방법을 더 잘 보여주었습니다. 내 이름에 대한 빈약 한 선택. – dkackman