2015-03-08 100 views
-4

反正有沒有在Java中寫這段if語句的語句在switch聲明中?從Java中的If語句到Switch語句

Object obj; 
if (obj instanceof Integer){ 

} 

if (obj instanceof Double){ 

} 

.... 

這只是一個例子。的DoubleInteger可以由任何其他對象類型

+0

您能舉個例子嗎?非常感謝! – 2015-03-08 18:56:23

+2

@manouti但是這與'instanceof'是多態的不一樣。 – RealSkeptic 2015-03-08 18:56:27

+0

@RealSkeptic你是對的。順便說一句,[這個問題](http://stackoverflow.com/questions/5579309/switch-instanceof)可能會有所幫助。 – manouti 2015-03-08 18:58:51

回答

2

更換反正是有寫這篇文章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; 
} 

不建議因爲它確實不必要的工作,並將無法​​正常在一般情況下(例如,如果你的接口或類測試,可以被繼承)工作。

+0

不是有用的,如果方法,如果代碼塊 – user4182277 2015-03-08 19:01:35

+0

@ user4182277返回:「如果」是最關鍵的詞;在這個問題中沒有任何暗示它確實如此。 – 2015-03-08 19:02:29

+0

我的意思是在這裏沒有必要。移動鍵盤鴨子。無論如何,作者應該考慮做一些重構工作。 – user4182277 2015-03-08 19:09:21

0

不可以,您可以看到,switch語句用於比較同一類型的許多不同值以匹配某個其他值。

switch語句形成這樣的:

switch (var){ 
    case 5: 
    //var == 5 
    break; 
    case 10: 
    //var == 10 
    break; 
    default: 
    //var is not 5 nor 10 
    break; 
} 

只允許比較爲恆定值,因此使得向數據類型沒用。 if語句對於此目的來說是更好的選擇,因爲使用switch語句(獲取實例名稱並以此格式進行比較)的唯一解決方案將會寫入太多額外(並且不必要)的代碼,這些代碼不是必需的,並且可以更容易以另一種方式完成。