反正有沒有在Java中寫這段if
語句的語句在switch
聲明中?從Java中的If語句到Switch語句
Object obj;
if (obj instanceof Integer){
}
if (obj instanceof Double){
}
....
這只是一個例子。的Double
Integer
可以由任何其他對象類型
反正有沒有在Java中寫這段if
語句的語句在switch
聲明中?從Java中的If語句到Switch語句
Object obj;
if (obj instanceof Integer){
}
if (obj instanceof Double){
}
....
這只是一個例子。的Double
Integer
可以由任何其他對象類型
更換反正是有寫這篇文章if語句的switch語句在Java中?
不合理,沒有,因爲case
標籤在Java中必須是常量。 (這是有switch
,JavaScript的是一個罕見的例外,幾乎所有的語言真實的。)你可能最好關閉與你有什麼,但if/else
而不僅僅是if
:
if (obj instanceof Integer){
// ...
}
else if (obj instanceof Double){
// ...
}
但是,你可以這樣做(從Java 7或更高版本開始),但僅限於,因爲您正在測試的具體類爲,它們是final
,因此我們不必擔心子類。
switch (obj.getClass().getName()) {
case "java.lang.Integer":
// ...
break;
case "java.lang.Double":
// ...
break;
}
我不建議因爲它確實不必要的工作,並將無法正常在一般情況下(例如,如果你的接口或類測試,可以被繼承)工作。
不是有用的,如果方法,如果代碼塊 – user4182277 2015-03-08 19:01:35
@ user4182277返回:「如果」是最關鍵的詞;在這個問題中沒有任何暗示它確實如此。 – 2015-03-08 19:02:29
我的意思是在這裏沒有必要。移動鍵盤鴨子。無論如何,作者應該考慮做一些重構工作。 – user4182277 2015-03-08 19:09:21
不可以,您可以看到,switch
語句用於比較同一類型的許多不同值以匹配某個其他值。
甲switch
語句形成這樣的:
switch (var){
case 5:
//var == 5
break;
case 10:
//var == 10
break;
default:
//var is not 5 nor 10
break;
}
只允許比較爲恆定值,因此使得向數據類型沒用。 if語句對於此目的來說是更好的選擇,因爲使用switch語句(獲取實例名稱並以此格式進行比較)的唯一解決方案將會寫入太多額外(並且不必要)的代碼,這些代碼不是必需的,並且可以更容易以另一種方式完成。
您能舉個例子嗎?非常感謝! – 2015-03-08 18:56:23
@manouti但是這與'instanceof'是多態的不一樣。 – RealSkeptic 2015-03-08 18:56:27
@RealSkeptic你是對的。順便說一句,[這個問題](http://stackoverflow.com/questions/5579309/switch-instanceof)可能會有所幫助。 – manouti 2015-03-08 18:58:51