2011-05-17 73 views
3

我在项目的“values”目录中有一个“numeric.xml”文件,该目录包含项目的大部分整数常量。我想在switch语句中使用其中的一些常量,但Eclipse/Java不喜欢这样,因为它不会将“resources.getInteger(R.integer.INTEGER_NAME)”视为常量。有没有办法让编译器和/或Eclipse看到它是一个常量,还是我只需要忍受if/else链?Android的整数资源可以用在switch语句中吗?

编辑:我试着做“final int INTEGER_NAME = resources.getInteger(R.integer.INTEGER_NAME)”,并在case语句中使用INTEGER_NAME,但那也没用。

+0

我tryed这些和它的工作 '资源R = getResources(); \t \t int i = r.getInteger(R.integer.lol); \t \t开关(I){ \t \t壳体1: \t \t \t Log.d( “笑”, “hehehe0”); \t \t \t break; \t \t默认: \t \t \t break; }' – PedroAGSantos 2011-05-17 15:52:24

+0

@subspider -OP询问使用'r.getInteger(...)'作为** case **值,而不是'switch'参数。 – 2011-05-17 15:58:22

回答

3

从技术上讲,您的整数资源值不是常量。编译器应该如何知道每个案例的价值?总是有可能为不同的配置检索不同的值。 (例如,您可以为values-land资源文件夹使用横向不同的值。)或者,您可以更改xml文件中的值。

如果它们确实是常量,请在代码中定义它们。我可以看到的唯一另一种方法是创建一个Runnable(或Callable)对象的调度表,每个分支对应一个交换机,并根据从资源检索到的值检索相应的对象。

+0

特德,谢谢你的回答。我希望你不介意我问你一个Java新手问题。有没有一种在Java中定义常量的干净方式,以便它们在一个地方定义,但可以被多个不相关的类看到? – 2011-05-17 15:55:04

+0

@Jim Clay是的,你放在从Application扩展的类中,声明变量为静态,希望它有帮助,但是如果它是常量,那么使用xml resorces会更好,如果它是复杂类型的话,我会使用静态 – PedroAGSantos 2011-05-17 15:57:51

+0

@Jim - 我使用接口很多为了那个原因。您可以将接口定义为字段值的集合。按照语言规范,这些是隐含的最终和静态的。 – 2011-05-17 15:59:39

2

那么,resources.getInteger(R.integer.INTEGER_NAME)是不是一个常数比resources.getString(R.string.STRING_NAME):它的查找,所以你真的不能在case语句中使用它们。你必须忍受if/else链。

0

我tryed这些和它的工作

Resources r = getResources(); 
int i = r.getInteger(R.integer.lol); 
switch (i) { 
    case 1: 
     Log.d("lol", "hehehe0"); 
     break; 
    default: 
     break; 
} 
+2

是的,我可以看到工作,但那不是我想要的。我想用“case r.getInteger ...”替换“case 1”。 – 2011-05-17 15:59:04

+0

OP询问如何使用'r.getInteger(...)'作为'case'值,而不是'switch'参数。 – 2011-05-17 16:00:57

+0

@Jim Clay我可以知道你为什么想要做这些或在什么情况下? – PedroAGSantos 2011-05-17 16:11:26