我正在創建一個簡單的基于文本的交互式應用程序,提示用戶輸入。每個輸入對應一個特定的命令,該命令調用特定的方法。因為有很多方法,所以我選擇在不同的類之間分配它們。所以應用程序是這樣工作的:主類負責讀取用戶輸入(使用 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 類上。

烙印99
TA貢獻1829條經驗 獲得超13個贊
但在這種情況下,我實際上并不想用值初始化一個對象,而只是將它用作對象的引用指針,這樣我就可以調用該類中的方法
問題是這些方法通常需要對象的狀態才能有意義(即要初始化的字段)。static
如果在您的情況下他們不這樣做,那么制作方法(和 call ClassC.methodC()
)或將這些方法放在具有默認構造函數的其他類上可能更有意義。
添加回答
舉報
0/150
提交
取消