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

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

Java:替代聲明空構造函數以從另一個類初始化對象

Java:替代聲明空構造函數以從另一個類初始化對象

qq_花開花謝_0 2022-07-06 17:08:11
我正在創建一個簡單的基于文本的交互式應用程序,提示用戶輸入。每個輸入對應一個特定的命令,該命令調用特定的方法。因為有很多方法,所以我選擇在不同的類之間分配它們。所以應用程序是這樣工作的:主類負責讀取用戶輸入(使用 Scanner 對象)。然后,用戶輸入作為參數傳遞給 B 類中的方法 B,該方法決定輸入對應于哪個命令。確定后,該方法調用正確的方法,該方法可以在任何其他類中(本例中為類 C 中的方法 C)這意味著我必須初始化對象實例以避免空指針異常。我必須從中初始化對象的類之一只有一個帶參數的構造函數,但在這種情況下我實際上不想用值初始化對象,而只是將其用作對象的引用指針,所以我可以調用該類的方法?,F在我正在使用一個空構造函數來解決這個問題,但是有沒有比聲明一個空構造函數更好的替代解決方案?我編寫了我認為可以證明我的問題的代碼:public class MainClass {    ClassB classB = new ClassB();    public void methodA {        classB.methodB(userInput);    }}public class ClassB {    ClassC classC = new ClassC();    public void methodB {        classC.methodC();    }}public class ClassC {    String name;    int age;    public ClassC(String name, int age) {        this.name = name;        this.age = age;    }    public ClassC() {    }    public void methodC() {        // Do something    }}
查看完整描述

2 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

真正的答案是:不要那樣做。你看,如果那個 ClassC 是關于存儲玩家的詳細信息......首先調用它Player(即使在舉例子時:使用有意義的名稱以便人們理解你的意圖)。

一旦我們談論玩家,就會很清楚:一個Player對象可能應該模擬一個(人類或非人類)玩家。沒有“沒有”名字或年齡的人類。這告訴你:錯誤的方法。你的類和模型應該反映現實。

您不會預先創建空對象;您在有意義的時間點創建它們(然后您向它們提供必要的信息,因此您可以理想地通過將所有字段聲明為最終字段來使對象不可變)。

所以,長話短說:退后一步,重新考慮你的設計。如果有“某事”不需要存在填充的 Player 對象,那么這可能應該是靜態方法,并且它可能應該位于 Player 類上。


查看完整回答
反對 回復 2022-07-06
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

但在這種情況下,我實際上并不想用值初始化一個對象,而只是將它用作對象的引用指針,這樣我就可以調用該類中的方法

問題是這些方法通常需要對象的狀態才能有意義(即要初始化的字段)。static如果在您的情況下他們不這樣做,那么制作方法(和 call ClassC.methodC())或將這些方法放在具有默認構造函數的其他類上可能更有意義。


查看完整回答
反對 回復 2022-07-06
  • 2 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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