java里两个类调用同一个类,如何传递句柄?

1.背景是这样的:我有一个MainActivity,它会new一个类“Base”。然后它会新建一个SecActivity,但此SecActivity也会用到这个“Base”类,但问题来了,这两个页面的Base类做不到同一个,请问大家有什么好方法解决?

2.示意代码如下:

 public class Base{
        public int Value;
    }

    public class A{
        Base baseHandle = new Base();
        private void foo()
        {
            baseHandle.Value = 10;
            B bHandle = new B();
            bHandle.baseHandle = baseHandle;
        }
    }

    public class B{
        Base baseHandle = new Base();
        private void foo()
        {
            baseHandle.Value = ?;
            //请问如何让Value 等于A中已赋值的10,而不是0;
        }
    }

在C#里这么做貌似没问题,但在java里,或者说是在Android studio里这个做却是行不通,恳请大家指教,谢谢。

-------------更新----
可能问题描述有点脱离本意,其实是这样的:
我一个底层类“myDriver”,里面包含了串口驱动和各式下位机接口方法,还有个定时器。

然后我在MainActivity里把这个myDriver实例化,并已经打开串口了。

然后我startActivity了secActivity,但是这个第二个页面没法调用第一个页面已经实例过的myDriver。

我是想让第二个页面能够操作到第一个页面实例化后的myDriver句柄,求救啊~~~

8个回答

写一个类,实现单例模式。
public class Base{
public int Value;
}
public class MakeBase{
private static Base base;
public static getInstance(){
if(base == null)
base = new Base();
return base;
}
}
public class A{
Base baseHandle = MakeBase.getInstance();
private void foo(){
baseHandle.Value = 10;
B bHandle = new B();
bHandle.baseHandle = baseHandle;
}
}

public class B{
Base baseHandle = MakeBase.getInstance();
private void foo(){
baseHandle.Value = ?;
//请问如何让Value 等于A中已赋值的10,而不是0;
}
}

jatamatadada
jatamatadada 对的,我也是这么做,貌似只能用单例来实现,感谢指导
2 年多之前 回复

题目的写法,实例化两个不同的对象,Value值不相同是正常的。

可以把Value定义为Base类的静态变量。

public static int Value;

读写Value时用类名加成员变量名的形式:

Base.Value

jatamatadada
jatamatadada 感谢指导!用静态变量貌似是最简单直接的解决办法。
2 年多之前 回复

public class Base{
public int Value;
}

public class A{
    Base baseHandle = new Base();
    private void foo()
    {
        baseHandle.Value = 10;
        B bHandle = new B(baseHandle);
        bHandle.baseHandle = baseHandle;
    }
}

public class B{
    Base baseHandle =null;
            public B(){
                baseHandle=new Base();
            }
            public B(Base b){
                baseHandle= b;
            }
    private void foo()
    {
        baseHandle.Value = ?;
        //请问如何让Value 等于A中已赋值的10,而不是0;
    }
}

下面代码是 根据你给出的改的

 public class Base {
    public static int Value;

    public static void main(String[] args) {
        A a = new A();
        a.foo();
        B b = new B();
        b.foo();
    }
}

class A {
    Base baseHandle = new Base();
    public void foo() {
        baseHandle.Value = 10;
        B bHandle = new B();
        bHandle.baseHandle = baseHandle;
    }
}

class B {
    Base baseHandle = new Base();
    public void foo() {
        int vb = baseHandle.Value;
        System.out.println(vb);
    }
}

图片说明

之所以你取出的值是0,是生命周期
当你class A 的foo()方法结束的时候,生命周期已经结束

希望我的解答对你有用 我的个人博客地址:http://blogxinxiucan.sh1.newtouch.com/

jatamatadada
jatamatadada 感谢指导!但我的base类是个底层驱动,不能由他来new A和B的界面的类。
2 年多之前 回复

如果你只是想用一个公共字段或者方法 就设定为静态字段或者方法就好了
如果你是封装了一个管理类 可以把base这个类设计为单例模式的 保证同时只存在一个实例就好了

你也可以用B继承A 父类引用指向子类对象方式,调用super() 也可以的

直接构造器传参好了,实在不行setter方法传参也行啊

第二遍是想加上缩进,可惜没成功

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!