如何使用switch case
代替if else
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
currentElement = true;
if (localName.equals("maintag"))
{
/** Start */
sitesList = new SitesList();
} else if (localName.equals("website")) {
/** Get attribute value */
String attr = attributes.getValue("category");
sitesList.setCategory(attr);
}
}
答案 0 :(得分:7)
答案 1 :(得分:5)
你做不到。 Java 1.6不支持使用字符串的switch语句。
Java 1.7可能会(它是Project Coin的功能之一),但对于1.6,您应该使用枚举(最佳选择)或以其他方式使用地图。
以下是:
创建一个界面:
interface SiteListProvider{
SitesList provide();
}
现在创建一个Map,将字符串映射到SiteListProvider
的不同实现:
Map<String, SiteListProvider> providers =
new HashMap<String, SiteListProvider>();
providers.put("foo", new SiteListProvider(){
public SitesList provide(){
return new SiteList("foo", "bar", "baz");
}
});
providers.put("phleem", new SiteListProvider(){
public SitesList provide(){
return new SiteList("otherstuff");
}
});
现在就这样使用它:
SiteList siteList = providers.get(localName).provide();
答案 2 :(得分:2)
switch
,包含java,仅适用于整体为核心的数据类型:http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
您不能将开关与字符串一起使用。遗憾。
答案 3 :(得分:1)
在Java 7中,您将能够使用字符串,现在您可以使用这样的枚举。
enum LocalName {
maintag, website, UNKNOWN;
public static LocalName lookup(String text) {
try {
return valueOf(text);
} catch(Exception e) {
return UNKNOWN;
}
}
}
switch(LocalName.lookup(localName)) {
case maintag:
/** Start */
sitesList = new SitesList();
break;
case website:
/** Get attribute value */
String attr = attributes.getValue("category");
sitesList.setCategory(attr);
break;
}
答案 4 :(得分:0)
如果您真的收到localName
作为String
,则不能。 switch
仅适用于byte
,short
,char
,int
和枚举(reference)。
答案 5 :(得分:0)
你无法避免if else
:
一个开关与字节一起工作,简短, char和int原始数据类型。它 也适用于枚举类型 (在类和继承中讨论) 还有一些“包装”的特殊课程 某些原始类型:角色, 字节,短整数和整数(在中讨论) 简单数据对象)。
来自:http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
答案 6 :(得分:0)
如果您知道可能的答案是什么,您可以执行以下操作:
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
currentElement = true
switch(localName.charAt(0)) {
case 'm':
sitesList = new SitesList();
break;
case 'w':
String attr = attributes.getValue("category");
// etc.
break;
default:
break;
}
...
}
仅当您知道预期值并且它们都需要具有不同的第一个字符时才有效! 此解决方案不会获得美容价格,但可以回答您的问题; - )
答案 7 :(得分:0)
如果您可以用枚举替换字符串,那么就这样做 - 正如已经说过的那样。如果你不能,你可以获得String的枚举,如下所示:
enum LocalName {MAINTAG, WEBSITE}
private final static Map<String, LocalName> localNameForString
= new HashMap<String, LocalName>();
static {
for (LocalName n : LocalName.values()) {
localNameForString.put(n.name().toLowerCase(), n);
}
}
LocalName n = localNameForString.get(localName);
if (n==null) {
// do something
} else switch (n) {
...
}
它有点冗长,但并不是很糟糕,使用枚举是一种乐趣。 :d
答案 8 :(得分:0)
我通过改变&#34;开关来解决这个问题。 for&#34; if&#34; 这样的事情:
CMMotionManager