2011-05-17 68 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

相關問題