Inheritance ControlP5不';t修改plugTo对象的继承变量

Inheritance ControlP5不';t修改plugTo对象的继承变量,inheritance,processing,control-p5,Inheritance,Processing,Control P5,在下面的示例中,B类扩展了一个类,它继承了int变量 cp5滑块插入到B对象的实例,赋值变量为“a” 控制台中打印的a值始终为0,因此滑块不会修改a变量 我怎样才能使controlP5对类的继承变量起作用呢?简而言之,我不认为你能让它像这样工作 现在来看,当您调用plugTo()函数时,它使用了引擎盖下的反射 具体来说,它使用getDeclaredFields()函数,该函数只返回子类中的字段,而不返回任何父类 在我看来,你有三个选择: 停止使用继承。ControlP5不是设计用来处理这种继承的

在下面的示例中,B类扩展了一个类,它继承了int变量

cp5滑块插入到B对象的实例,赋值变量为“a”

控制台中打印的a值始终为0,因此滑块不会修改a变量


我怎样才能使controlP5对类的继承变量起作用呢?

简而言之,我不认为你能让它像这样工作

现在来看,当您调用
plugTo()
函数时,它使用了引擎盖下的反射

具体来说,它使用
getDeclaredFields()
函数,该函数只返回子类中的字段,而不返回任何父类

在我看来,你有三个选择:

停止使用继承。ControlP5不是设计用来处理这种继承的。所以只需使用简单的类,您就会很好

请求此功能。您可以为此提交功能请求。但我猜这不会是一个高优先级,因为它不是一个典型的用例

自己动手。ControlP5是开源的。所以你可以自己做些改变。或者您可以编写一个简单的解决方案,可能是一个不同的类,其中的函数以某种方式映射到子类

    import controlP5.*;
    ControlP5 cp5;
    B b;
    void setup()
    {
      size(200,200);
      b = new B();
      cp5 = new ControlP5(this);
      cp5.addSlider("a")
         .setPosition(20,20)
         .setRange(0,255)
         .plugTo(b,"a");
    }

    void draw()
    {
       println(b.a , frameCount);
    }

    class B extends A 
    {
      B()
      {
        super();

      }
    }
    class A 
    {
      int a;
      A()
      {
        a  = 0;
      }
    }