为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2022-11-02 16:57:33
我希望这听起来不会太愚蠢并且有意义。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 不起作用的原因。
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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


查看完整回答
反对 回复 2022-11-02
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

凯文解释了这个问题。但是,您可以使用泛型告诉编译器您要输入什么类型,而不必限制类型或进行危险的强制转换,因为保证对象的类型并不总是那么容易。


class Test<T> {

  int num;

  public T obj;


  public Test(int num, T 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<Bird> x = new Test<>(4, y);

}


查看完整回答
反对 回复 2022-11-02
  • 2 回答
  • 0 关注
  • 62 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信