猿问

将对象传递给类时,如何访问它的变量/函数?

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


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 不起作用的原因。


慕勒3428872
浏览 64回答 2
2回答

潇潇雨雨

如果你有一个 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 中创建类的教程。

沧海一幻觉

凯文解释了这个问题。但是,您可以使用泛型告诉编译器您要输入什么类型,而不必限制类型或进行危险的强制转换,因为保证对象的类型并不总是那么容易。class Test<T> {&nbsp; int num;&nbsp; public T obj;&nbsp; public Test(int num, T obj){&nbsp; &nbsp; this.num = num;&nbsp; &nbsp; this.obj = obj;&nbsp; }&nbsp; int getNum(){&nbsp; &nbsp; return num;&nbsp; }}class Bird {&nbsp; public int size;&nbsp; public Bird(int size){&nbsp; &nbsp; this.size = size;&nbsp; }&nbsp; public void setSize(int size){&nbsp; &nbsp; this.size = size;&nbsp; }&nbsp; public int getSize(){&nbsp; &nbsp; return size;&nbsp; }}void setup(){&nbsp; &nbsp;size(100, 100);&nbsp; &nbsp;Bird y = new Bird(7);&nbsp; &nbsp;Test<Bird> x = new Test<>(4, y);}
随时随地看视频慕课网APP

相关分类

Java
我要回答