2012-01-12 77 views
3

經過很長時間我用了java,發現與其他語言不同,java不支持帶字符串的開關盒(僅適用於no和enums)。它背後的原因是什麼?如果其他語言輕鬆實現它,爲什麼不是java?帶字符串的開關盒Java

+0

[開關與字符串在Java中聲明】(http://stackoverflow.com/questions/338206/switch-statement-with-strings-in-java) – 2012-01-12 20:53:13

+0

感謝您的鏈接的可能重複。我在搜索這個問題之前,先搜索這個問題..但在我的搜索中沒有找到那個鏈接.. – Ank 2012-01-12 20:55:13

+0

什麼語言允許switch語句中的字符串? – 2012-01-12 20:56:13

回答

12

此功能是在Java 7(於今年7月發佈)中實現的。他們爲什麼沒有早些實施呢?由於Sun收購了整個Sun,J7實際上被推遲了。

最新文件:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

+0

我知道......他們爲什麼會阻止它...... – Ank 2012-01-12 20:53:54

+1

正如我在編輯之後所說的那樣:Java的開發實際上被推遲了,因爲Sun被Oracle收購了。 – 2012-01-12 20:55:43

+0

@Zenzen我認爲甲骨文收購了Java而不是Sun,或者它們是同一個東西? – fireshadow52 2012-01-12 20:59:45

2

您可以在switch語句中使用字符串作爲Java 7中

5

IMO ,Java的設計師聰明地忽略了切換字符串。每當你做一個字符串切換(並且,我承認,我有時也會這樣做),你應該考慮:

  1. 爲什麼我在這裏不使用多態?
  2. 至少,我應該使用一個枚舉?
+0

完全同意!儘可能地忽略使用字符串切換。或者重新考慮你的系統的設計。 – 2015-02-23 04:44:03

+0

打開用戶輸入比將其轉換爲枚舉更直接(使用開關可能?),然後打開該枚舉。它也使依賴週期變得更容易,並且更加靈活。 此外,枚舉只在Java 5中添加,所以最初的決定與他們無關:) – Elazar 2017-06-01 06:52:33

0

新的Java版本(JDK 7)需要很長時間才能發佈。這就是爲什麼你可能無法知道.... 下面是一個例子,如何使用字符串開關的情況下...

option = scanner.nextLine(); 
    switch (option) { 
    case "1": System.out.println("Hello");break; 
    case "2": break; 
    case "3": break; 
    case "4": break; 
    case "5": break; 
    default: System.out.println("Invalid option. Please try again..."); break; 
    } 
+0

不是一個很好的例子 – 2015-04-01 10:22:01

0

不是很漂亮,但這裏是Java 6和波紋管的另一種方式:

String runFct = 
     queryType.equals("eq") ? "method1": 
     queryType.equals("L_L")? "method2": 
     queryType.equals("L_R")? "method3": 
     queryType.equals("L_LR")? "method4": 
      "method5"; 
Method m = this.getClass().getMethod(runFct); 
m.invoke(queryField);