设计用于到达具有不同对象的同一类的变量

时间:2015-12-27 09:12:43

标签: java android

我是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按钮。

2 个答案:

答案 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方法在不同页面上创建具有单例模式的类将解决所有问题。