亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將對象傳遞給類時,如何訪問它的變量/函數?

將對象傳遞給類時,如何訪問它的變量/函數?

慕勒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 關注
  • 89 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號