首页 > 解决方案 > 将对象传递给类时,如何访问它的变量/函数?

问题描述

我希望这听起来不会太愚蠢并且有意义。

class Test {
  int num;
  public Object obj;

  public Test(int num, Object obj){
    this.num = num;
    this.obj = obj;
  }

  int getNum(){
    return num;
  }

}

class Bird {
  public int size;

  public Bird(int size){
    this.size = size;
  }

  public void setSize(int size){
    this.size = size;
  }

  public int getSize(){
    return size;
  }

}
 void setup(){
   size(100, 100);

   Bird y = new Bird(7);
   Test x = new Test(4, y);

   //x.obj.size does not work
   //x.obj.getSize() does not work
 }

所以我有这两个文件。第一个有类,第二个实际运行它。传入对象后,尝试访问该类的变量或函数不起作用。有没有办法使这项工作?

我最初试图找到一种方法来制作函数的 ArrayList(没有 Lambda),因为这变得徒劳无功,我考虑过改变我的方式。

我也尝试过制作public Object obj;public Bird obj;但这并没有改变任何东西。

我在正确的轨道上吗?有没有一个好方法来做这样的事情?

我还要注意,这是在处理 3.5 中编写的。它就像 Java 的语法变化很小,所以这就是为什么有些东西看起来不正确的原因。这也是 Lambda 不起作用的原因。

提前致谢!

标签: javaprocessing

解决方案


如果你有一个 type 的变量Object,那么编译器只“知道”类中的函数Object

如果要使用更特定类型的函数,则必须强制转换变量,如下所示:

Bird z = (Bird) x.obj;
println(z.size);

请注意,这实际上并没有改变对象的类型,它只是告诉编译器期望什么类型。如果变量实际上不是 a Bird,那么这将失败。

或者您可以将obj变量更改为更具体的类型:

class Test {
  int num;
  public Bird obj;

  public Test(int num, Bird obj){
    this.num = num;
    this.obj = obj;
  }

  // ...

现在您可以从Bird类中访问函数:

println(x.obj.size);

无耻的自我推销:这里有一个关于在 Processing 中创建类的教程。


推荐阅读