2017-04-15 63 views
0

好了,所以這是我的代碼:的Java如何從另一個對象變量調用對象的功能

public class First { 
    public static void main(String[] args) { 
     Object o; 
     Second second = new Second(); 
     o = second; 
     o.doSomething(); 
    } 
} 

下一頁:

public class Second { 
    public Second() { 
     ... 
    } 

    public static void doSomething() { 
     ... 
    } 
} 

然後我得到的NullPointerException 我如何能得到「o」做些什麼? 任何幫助表示讚賞。

+0

你不能在這裏得到一個**空指針異常**該代碼甚至沒有編譯?你不能在'o'上調用'doSomething()'。你可能想要做'second.doSomething()' –

+1

1.你不能在'Object'變量上調用'doSomething'。 2. doSomething是一個靜態函數,你可以直接在Class:'Second.doSOmething();'上調用它。我真的建議你通過一些Java教程 – JohnnyAW

回答

0

你要做的鑄造

((Second) o).doSomething(); 
+0

'doSomething'是一個靜態函數,應該以靜態方式訪問 – JohnnyAW

+0

仍然不可以 –

+0

是的......它是從靜態方法(主)調用的。所以它會正常工作...我試過.. –

0

然後我得到的NullPointerException

獲得一個NullPointerException異常這裏是不可能的,因爲這個代碼將無法編譯。

您不能撥打電話doSomething()o,這是參考Object而不是Second。嘗試類型轉換oSecond

((Second)o).doSomething(); 

或調用它second本身: -

second.doSomething(); 

此外,doSomething()是一個靜態方法,你可能應該做

Second.doSomething(); 
0

確定我刪除靜態仍然不工作。

我需要將對象更改爲其他對象,如第三和第四,所以我必須保持「o」,或者有另一種方式來做到這一點?

0

下面是你的答案:

  1. 您必須初始化對象變量,然後分配的(第二)的實例。
  2. 至於有些人告訴你上述情況,DoSomething的()方法是靜態的,所以應該如下訪問:second.doSomething()Second.doSomething()(使用的名稱該類直接,不需要實例化一個對象)。
  3. 爲什麼要分配o

    ​​

    }


而且根據您在下面的意見,你需要不斷的實例Ø對於其他類型的對象;當我讀到這些時,我想象你正在使用不同類型的類,並且在運行時你不知道你將接收哪個對象作爲參數。如果這是正確的,那麼請查看繼承的概念,也許這可以幫助你找到你想要做的事情。如果沒有,那麼你基本上試圖做的是複製工廠模式Factory Pattern。這將允許您根據您的配置創建類的實例。

希望這會有所幫助。

+0

我想更改o到其他對象 –

相關問題