在我的程序中,我正在读取并解析文件以获取资源。
我提取一个表示资源类型的字符串,执行一个简单的if then else语句来检查它是否与任何已知类型匹配,如果不匹配则抛出错误:
if(type.toLowerCase() == "spritesheet") {
_type = ResourceType.Spritesheet;
} else if(type.toLowerCase() == "string") {
_type = ResourceType.String;
} else if(type.toLowerCase() == "texture") {
_type = ResourceType.Texture;
} else if(type.toLowerCase() == "num") {
_type = ResourceType.Number;
} else {
throw new Exception("Invalid Resource File - Invalid type: |" + type.toLowerCase() + "|");
}
忽略我的错误命名和非描述异常,这个语句总是转到最后的其他语句,即使从文件中读入类型IS“spritesheet”等等。
java.lang.Exception: Invalid Resource File - Invalid type: |spritesheet|
at Resource.Load(Resource.java:55) //Final else.
如果我在此调用之前将类型设置为“spritesheet”,它会起作用,所以我想知道它是否是某种编码错误或什么?
我在java中没有做太多工作,所以我可能会遗漏一些简单的事情:)
答案 0 :(得分:7)
假设type
是一个字符串,您希望使用String.equals()来测试是否相等。使用==运算符测试以查看变量是否是对同一对象的引用。
另外,为了让您的生活更轻松,我建议您使用String.equalsIgnoreCase(),因为这样可以避免您拨打toLowerCase()
。
答案 1 :(得分:2)
从Java 7开始,您可以在switch语句中使用Strings! :)
以下内容应该有效:
switch (type.toLowerCase()) {
case "spritesheet": _type = ResourceType.Spritesheet; break;
case "string": _type = ResourceType.String; break;
case "texture": _type = ResourceType.Texture; break;
case "num": _type = ResourceType.Number; break;
default: throw new Exception("Invalid Resource File " +
"- Invalid type: |" + type.toLowerCase() + "|");
}
我还没有尝试过,让我知道它是怎么回事!