jatamatadada
2017-07-06 07:59
采纳率: 100%
浏览 1.9k
已采纳

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条回答 默认 最新

  • 學诚 2017-07-07 09:00
    已采纳

    写一个类,实现单例模式。
    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;
    }
    }

    打赏 评论
  • 战在春秋 2017-07-06 08:17

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

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

    public static int Value;

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

    Base.Value

    打赏 评论
  • sinat_38913556 2017-07-06 08:33

    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;
        }
    }
    
    打赏 评论
  • u012743772 2017-07-06 09:08

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

     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/

    打赏 评论
  • dllsndy 2017-07-06 09:53

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

    打赏 评论
  • BasicDataSource 2017-07-06 10:16

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

    打赏 评论
  • 疯雪 2017-07-06 10:35

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

    打赏 评论
  • 學诚 2017-07-07 09:01

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

    打赏 评论

相关推荐 更多相似问题