2015-02-24 74 views
0
class Target { 
String name; 
int amount; 
double weight; 
    Target (String targetName, int targetAmount, double targetWeight) { 
     name = targetName; 
     amount = targetAmount; 
     weight = targetWeight; 
    } 
} 

完全是任意構造函數,它不是更大的東西的一部分。構造函數中輸入的類型不正確

想我創造的這個地方 一個實例。如果我輸入了錯誤的類型參數的

Target object1 = new Target("Apple", 4.32, "who knows?") 

我怎樣才能使構造檢查,如果參數的類型是正確的,如果不是,請再次申報object1

在構造函數中寫while循環是可以接受的嗎? (使用instanceof檢查,只要類型不正確,並要求重新輸入)

另一個想法是創建與instanceof檢查涉及一個單獨的方法,但參數有不同的類型,有沒有辦法返回聲明參數的類型?

或者我完全在想這個,有一個更簡單的方法來做到這一點?

+5

Java是強類型的,所以編譯器會向你發出警告。 – gtgaxiola 2015-02-24 16:08:40

+1

你在思考 - java將確保你的構造函數參數是正確的類型。 – PeterK 2015-02-24 16:10:56

回答

1

Target object1 = new Target("Apple", 4.32, "who knows?")會給你一個編譯時間錯誤。方法調用在編譯期間解析爲,但實際調用在運行時完成。

所以,一旦遇到上述聲明中,編譯器檢查構造其能夠採取這些觀點存在,如果沒有,那麼你會得到一個錯誤。

如何讓構造函數檢查參數類型是否正確,如果不是,請再次聲明object1。 - 你不應該這樣做。當new is called即創建對象時調用構造函數,如果參數不匹配,則不調用構造函數本身。爲此(如果需要)使用靜態幫助方法

是否可以在構造函數中編寫while循環? (使用instanceof檢查,只要類型不正確並要求重新輸入)

在構造函數中不應該有任何業務邏輯。就這樣。 instanceof檢查可能根據上下文(案件到外殼的基礎上)

我是完全過想這和有一個更簡單的方法來做到這一點接受 - YES。不要用無效的參數調用構造函數。不要把業務邏輯在其中。驗證邏輯是可以接受的。

3

您不需要,因爲Java編譯器在編譯期間已經給您一個錯誤。它是強類型的,這意味着變量將只有一種類型和一種類型。

你給的代碼將無法編譯

2

首先,如果你給錯了參數的構造函數,java編譯器將返回一個錯誤。回答第二個問題,可以在構造函數中使用while循環。

相關問題