我是Android开发者并坚持实施一些设计。这是我的基本设计:
Class x extends a{
y obj = new y();
y obj2 = new y()
}
Class y extends a{
z obj3 = new z();
}
我需要什么:在obj1中需要达到obj2的obj3'函数(setChecked)
我做了什么尝试: 解决方法尝试1-)做y类扩展x而不是a但是当我尝试到达obj2时,它是不同的对象,其中x对象创建,因此y对象是不同的! 解决方案尝试2-)尝试使用Singeleton模式,因为它只是一个对象创建。但是你知道它应该是静态的。但是在android活动中,变量不应该是静态创建的,而是应该动态地改变。
参见:
a:BaseAdapter
z:ToogleButton
我在尝试:在android中,我确实实现了导航栏。 Listview对象有两个ListView对象,我用我的解决方案支持较低的api。在第一个子列表视图对象的Toogle按钮状态发生变化时,它应该将第二个listview对象更改为toogle按钮。
答案 0 :(得分:0)
快速提示:出于可读性目的,最好以大写字母开始使用大写字母,并使它们略长于1个字符,即使是出于示例目的。
您通常不希望从另一个对象访问一个对象的私有字段 - 这会破坏封装并使您很难以任何方式更改该字段,因为您无法真正了解谁和#39;引用它。
您需要做的是在y
上提供一种访问方法,为您调用obj3
上的相关方法。这有效地将obj3
字段封装在y
类的行为背后。
示例:
Class MyClassX extends SomeClassA {
private final MyClassY obj = new MyClassY();
private final MyClassY obj2 = new MyClassY()
public final void doSomeComplexStuff() {
...
obj2.setChecked(true);
...
}
}
Class MyClassY extends SomeClassA {
private final MyClassZ obj3 = new MyClassZz();
public final void setChecked(final boolean checked) {
obj3.setChecked(checked);
}
}
所以当你调用obj2.setChecked(true)时,调用会被传递给obj2中包含的MyClassZ实例。
答案 1 :(得分:0)
仔细思考后,我找到了解决方案,我只需要参考对象的地址。但在Java中,除了一个思考之外,没有运算符的引用地址。将对象实例传递给另一个对象,请参考该创建对象的地址。使用传递的对象效果传递对象完成所有操作,以便将obj2变量传递给obj1构造函数,以解决问题。但在该解决方案中,只有obj1可以达到obj2变量和函数,obj2无法达到obj1。对于相互关系,我认为使用该对象的get和set方法在不同页面上创建具有单例模式的类将解决所有问题。