有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

关于范围的java通用编程问题

这更像是一个一般编程问题,所以我给出的代码示例只是伪代码。我用C++、java和python编程,所以伪代码是这些代码的混合。我不太确定这个名字叫什么,所以如果你能给我一个名字,我可以在谷歌上搜索更多关于它的信息,我将不胜感激

假设我有一个名为a的类。在这个类中,我创建了一个名为B的类的实例:

class A {
    //instance variables
    classB;
    variable1;
    variable2;

    //instance methods
    instanceFunction(parameter1, parameter2) {
        //Do Stuff
    }

    function1(parameter1) {
        classB = new B(some parameters);
    }

    setVariable1(value) {
        variable1 = value;
    }

    getVariable2() {
        return variable2;
    }
}

在类B中,我想更改或使用类A中的实例变量。我可以通过将对A的引用传递到B中来实现这一点。因此,我的A::function1如下所示:

function1(parameter1) {
    variable1 = new B(this, other parameters);
    //Python syntax:
    //variable1 = B(self, other parameters)
}

我的B班是这样的:

class B {
    //instance variables
    parentClass;
    variable2;

    //instance methods
    instanceFunction(classA, other parameters) {
        parentClass = classA;
    }

    function1() {
        parentClass.setVariable1(someValue);
    }

    function2() {
        variable2 = parentClass.getVariable2();
    }
}

还有什么其他方法可以在B类中使用A类中的变量

如果代码是C++或java,假定所有变量都是私有的,所有的方法和函数都是公共的。还假设所有变量都是通过引用或指针传递的

编辑:

首先,感谢所有回复

一些澄清:

我问这个问题的原因是我在C++和Python中做了大量的Qt编程。在Qt中,有信号和插槽。这让内部对象告诉外部对象做某事。例如,我有一个对象A,其中有对象B和C。对象B发生了一些变化,B需要让A和C知道。所以B会发出一个信号。A会捕捉到这个信号并做它需要做的事情。然后,A也会让C知道B发出了这个信号。这样C就可以做它需要做的事情

我问这个问题的原因是因为我想知道如何在不使用Qt库的情况下做我描述的事情

另外,假设B“不是”A,所以我不能/不想使用继承


共 (3) 个答案

  1. # 1 楼答案

    I am not too sure what the name of this is called...

    我很难遵循您的伪代码,但您可能可以通过以下方式完成所需的内容:

    • Inheritance,它允许派生类从基类(静态或实例变量)访问受保护的变量
    • Friend functions(C++)(允许函数访问类上的私有实例变量)
    • Dependency Injection(但可能只有当你有比你在问题中实际陈述的更复杂的需求时。在这个超级简单的情况下,当一个实例被传递到一个函数时,你只需要访问公共属性或字段——你可能必须通过公共getter/setter来访问它们,因为你希望变量是私有的)

    编辑:

    在编辑之后,很明显您想要the Observer Design Pattern。这允许您将响应状态更改的代码与发出状态更改信号的代码分离

    这种模式与其说是关于变量的访问(正如我的第一个链接所述),不如说是关于对事件的响应(或者“状态转换”,如果你把你的类看作一个Finite State Machine

  2. # 2 楼答案

    考虑到你所做的编辑;使用boost::signals或线程安全信号2(也在boost中)实现sig/插槽机制可能是可行的。这意味着您正在寻找类似于Qt的sigslot机制的行为。还有很多选择,看看所谓的问题here

  3. # 3 楼答案

    为了减少对象之间的耦合,你不应该让B引用a——你应该给它一个由a实现的接口的引用。区别是微妙的,但它确实让你思考跨接口边界真正需要共享哪些操作或数据