Java 如何使用带字符串的开关
我有下面的代码,我写的是为了摆脱一大堆if-then-else语句。唯一的问题是,我刚刚发现Switch语句不能与字符串一起使用 这有什么窍门吗 谢谢Java 如何使用带字符串的开关,java,android,Java,Android,我有下面的代码,我写的是为了摆脱一大堆if-then-else语句。唯一的问题是,我刚刚发现Switch语句不能与字符串一起使用 这有什么窍门吗 谢谢 switch(xpp.getName()) { case("creature") : attribID = Integer.parseInt(xpp.getAttributeValue(0)); case("name") : elName = xpp.getName(); break;
switch(xpp.getName()) {
case("creature") : attribID = Integer.parseInt(xpp.getAttributeValue(0));
case("name") : elName = xpp.getName(); break;
case("race") : elName = xpp.getName(); break;
case("gender") : elName = xpp.getName(); break;
case("alignment") : elName = xpp.getName(); break;
case("age") : elName = xpp.getName(); break;
case("condition") : elName = xpp.getName(); break;
case("skinColor") : elName = xpp.getName(); break;
case("hairColor") : elName = xpp.getName(); break;
case("size") : elName = xpp.getName(); break;
case("height") : elName = xpp.getName(); break;
case("weight") : elName = xpp.getName(); break;
case("hitPoints") : elName = xpp.getName(); break;
case("armorClass") : elName = xpp.getName(); break;
case("actionPoints") : elName = xpp.getName(); break;
case("magicPoints") : elName = xpp.getName(); break;
case("strength") : elName = xpp.getName(); break;
case("dexterity") : elName = xpp.getName(); break;
case("intelligence") : elName = xpp.getName(); break;
case("weapon") : elName = xpp.getName(); break;
case("armor") : elName = xpp.getName(); break;
case("magicItem") : elName = xpp.getName(); break;
case("attackSpell") : elName = xpp.getName(); break;
case("defenseSpell") : elName = xpp.getName(); break;
case("item1") : elName = xpp.getName(); break;
case("item2") : elName = xpp.getName(); break;
}
字符串开关仅适用于Java 7。因此,您需要使用Java7SDK来编译代码
但是,如果您将Eclipse用作开发Android应用程序的IDE,则无法将Android项目的代码遵从性级别设置为Java7。然后,您必须等待android人员支持java 7,或者使用IntelliJ,或者使用java 7 sdk从命令行编译代码,然后使用dex编译器 字符串开关仅适用于Java 7。因此,您需要使用Java7SDK来编译代码
但是,如果您将Eclipse用作开发Android应用程序的IDE,则无法将Android项目的代码遵从性级别设置为Java7。然后,您必须等待android人员支持java 7,或者使用IntelliJ,或者使用java 7 sdk从命令行编译代码,然后使用dex编译器 Java7支持打开字符串,但它不适用于android 我建议使用枚举。创建一个枚举类,并将枚举命名为所需的字符串。然后可以确定给定字符串的枚举并打开它 下面是一个例子: Number.java
public enum Number { one, two, three }
public class Switcher {
public static void main(String[] args) {
String input = "one";
switch (Number.valueOf(input)) { // <- that's the magic!
case one:System.out.println("1");break;
case two:System.out.println("2");break;
case three:System.out.println("3");break;
}
}
}
Switcher.java
public enum Number { one, two, three }
public class Switcher {
public static void main(String[] args) {
String input = "one";
switch (Number.valueOf(input)) { // <- that's the magic!
case one:System.out.println("1");break;
case two:System.out.println("2");break;
case three:System.out.println("3");break;
}
}
}
公共类切换器{
公共静态void main(字符串[]args){
字符串输入=“一”;
switch(Number.valueOf(input)){/Java7支持在字符串上切换,但它不适用于android
我建议使用枚举。创建一个枚举类,并将枚举命名为期望的字符串。然后可以确定给定字符串的枚举并打开它
下面是一个例子:
Number.java
public enum Number { one, two, three }
public class Switcher {
public static void main(String[] args) {
String input = "one";
switch (Number.valueOf(input)) { // <- that's the magic!
case one:System.out.println("1");break;
case two:System.out.println("2");break;
case three:System.out.println("3");break;
}
}
}
Switcher.java
public enum Number { one, two, three }
public class Switcher {
public static void main(String[] args) {
String input = "one";
switch (Number.valueOf(input)) { // <- that's the magic!
case one:System.out.println("1");break;
case two:System.out.println("2");break;
case three:System.out.println("3");break;
}
}
}
公共类切换器{
公共静态void main(字符串[]args){
字符串输入=“一”;
switch(Number.valueOf(input)){/作为替代,如果您不能直接切换到Java 7,最简单的方法是用一堆if-else
替换switch语句。或者,您可以尝试切换字符串的hashCode,但我只建议您确保没有冲突(hashCode())不保证能防止冲突!)。最清晰、最简单的解决方案是使用if-else
。它保持可读性,并允许您仍然支持旧版本的Java
编辑:只有一个案例有不同之处!为什么不简单地做:
if (xpp.getName().equals("creature") {
attribID = Integer.parseInt(xpp.getAttributeValue(0));
} else {
elname = xpp.getName();
}
另一种选择是,如果您不能直接切换到Java 7,最简单的方法是用一堆if else
替换switch语句。或者,您可以尝试切换字符串的hashCode,但我只建议您确保没有冲突(hashCode()不能保证防止冲突!)。最清晰、最简单的解决方案是使用if-else
。它保持可读性,并允许您仍然支持旧版本的Java
编辑:只有一个案例有不同之处!为什么不简单地做:
if (xpp.getName().equals("creature") {
attribID = Integer.parseInt(xpp.getAttributeValue(0));
} else {
elname = xpp.getName();
}
重新思考你的设计。让它更面向对象。也许可以使用匿名类,或者某种分派表。或者只是简化它。看起来似乎只有两种选择(“生物”做一件事,其他任何东西都做另一件事)。难以维护的代码是重构的主要候选代码。重新思考您的设计。使其更面向对象。可能使用匿名类或某种分派表。或者只是简化它。看起来似乎只有两种选择(“生物”做一件事,其他任何东西都做另一件事)。难以维护的代码是重构的主要候选对象。对于所有情况,您都在做同样的事情,除了xpp.getName()是“生物”。这意味着您的所有代码都可以轻松转换为单个if语句
if ( xpp.getName().equal("creature"))
attribID = Integer.parseInt(xpp.getAttributeValue(0));
else
elName = xpp.getName();
看起来你应该开始编写更多面向对象的程序,并创建一些类,而不是使用名称来确定对象是什么对于所有情况,你都在做同样的事情,除了xpp.getName()是“生物”。这意味着你所有的代码都可以很容易地转换成一个单独的if语句
if ( xpp.getName().equal("creature"))
attribID = Integer.parseInt(xpp.getAttributeValue(0));
else
elName = xpp.getName();
看起来您还应该开始编写更面向对象的程序,并创建一些类,而不是使用名称来确定对象是什么是的,使用支持切换字符串的JDK(即Java 7).duplicate-这只是一个伪代码,对吗?如果不是,这个case语句看起来很可笑。上面的语句看起来应该是一个if-else语句。@mre Android不支持Java 7。@Eng.Fouad,啊,我不知道。:DYeah,使用支持打开字符串的JDK(即Java 7).duplicate-这只是一个伪代码,对吗?如果不是,这个case语句看起来很可笑。上面的语句看起来应该是一个if-else语句。@mre Android不支持Java 7。@Eng.Fouad,啊,我不知道。:D