如果我在主类中实例化一个对象,请说:
SomeObject aRef = new SomeObject();
然后我从主类中实例化另一个对象,比如说:
AnotherObject xRef = new AnotherObject();
AnotherObject的实例如何使用aRef引用来访问SomeObject中的方法? (使用SomeObject的相同实例)
答案 0 :(得分:6)
为什么不通过引用原始AnotherObject
来实例化SomeObject
?
e.g。
SomeObject obj = new SomeObject();
AnotherObject obj2 = new AnotherObject(obj);
和AnotherObject
看起来像:
// final used to avoid misreferencing variables and enforcing immutability
private final SomeObject obj;
public AnotherObject(final SomeObject obj) {
this.obj = obj;
}
因此AnotherObject
引用了之前创建的SomeObject
。然后它可以使用此引用来调用方法。如果在AnotherObject
范围之外不需要原始对象,则在AnotherObject
内创建它并以这种方式强制封装。
答案 1 :(得分:1)
我认为你所问的是关于范围的问题。你问xRef在执行过程中如何使用aRef?答案是aRef引用需要在实例化时传递给xRef对象
xRef = new AnotherObject(aRef)
或实例化之后你可以
xRef.setSomeObject(aRef)
答案 2 :(得分:1)
他的问题的答案是让第一个类成为静态类。
答案 3 :(得分:0)
xRef.SetSomeObject(aRef);
其中SetSomeObject具有类似
的签名public void SetSomeObject(SomeObject obj)
{
obj.DoStuff();
}
并且是AnotherObject
类型的成员函数。
答案 4 :(得分:0)
战略设计模式和装饰设计模式有两种不同的方式。
例如,您可以:
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()
答案 5 :(得分:0)
您需要在构造函数AnotherObject
中使用AnotherObject xRef = new AnotherObject(aRef)
或使用setter方法xRex.setSomeObject(aRef)
向AnotherObject
的实例提供aRef的引用。在这种情况下,class AnotherObject {
SomeObject aRef;
public AnotherObject(SomeObject aRef) {
this.aRef = aRef;
}
public void doSomethingWithSomeObject() {
aRef.doSomething();
}
}
需要有一个实例变量来存储可以在内部使用的aRef,如:
SomeObject
您还可以将AnotherObject
的实例传递给xRef.doSomethingWithSomeObject(aRef)
上需要class AnotherObject {
public void doSomethingWithSomeObject(SomeObject aRef) {
aRef.doSomething();
}
}
的方法。
{{1}}
答案 6 :(得分:0)
有很多方法可以做到(正如其他人指出的那样)。你真的想要考虑你的对象结构......
也许你的main方法甚至不应该实例化aRef,也许它应该在xRef的构造函数中实例化(这是xRef往往是aRef功能的“部分”的情况。
如果aRef在某些时候可能有多个实例,您可能根本不想将其存储起来,那么只要xRef方法使用它就可以传入它。
这是您需要在业务逻辑级别考虑对象模型的地方。对象之间有什么关系等。
(我的猜测是你希望xRef实例化aRef并保留引用本身,然后如果你的“main”真的需要与aRef交谈,它可以要求xRef转发消息或者向xRef询问它的aRef实例。 )
答案 7 :(得分:0)
你必须传递参考,然后用它做点什么。
class AnotherObject {
SomeObject someObject;
public void setSomeObject( SomeObject some ) {
this.someObject = some;
}
public void doSomethingWithSomeObject() {
this.someObject.someMethod();
}
..... rest of your code
}
这样你就可以在main方法中使用它了
public static void main( String [] args ) {
SomeObject xRef = new SomeObject();
AnotherObject aRef = new AnotherObject();
// pass the ref...
aRef.setSomeObject( xRef );
// use it
aRef.doSomethingWithSomeObject();
}
这就是你需要的吗?
答案 8 :(得分:-1)
AnotherObject可以拥有某种类型为SomeObject的成员或属性吗?这也是解决这个问题的另一种方法。
因此,如果AnotherObject类中存在“SomeObjectMember”成员:
xRef.SomeObjectMember = aRef;