2016-11-05 62 views
0

我有兩個變量,我試圖比較,但變量名稱很長,我試圖清理我的代碼,這裏的所有代碼僅用作示例。使用字符串引用不同變量的值

我想要做的是這樣的:

if(objectOne.objectTwo.variableName1 == objectTwo.objectTwo.variableName1) 
if(objectOne.objectTwo.variableName2 == objectTwo.objectTwo.variableName2) 
... 

,併爲此多次,但每次改號在字符串 結束,但我試圖做這樣的:

for(int i = 0 ; i < 5 ; ++i) { 
    String firstString = "objectOne.objectTwo.variableName" + i; 
    String secondString = "objectTwo.objectTwo.variableName" + i; 
    if(firstString == secondString) 
     //more code 
} 

然而,這比較字符串和我試圖用自己的字符串,以不同變量的引用有沒有這樣做的方法嗎?

編輯:我正在尋找清理代碼,但我遇到的主要問題是,如果我有100個variableNameNumber變量我將不得不做100個單獨的if語句,我試圖做一個簡單的for循環,因爲我增加變量名得到更新

+0

的[我如何在Java中比較字符串?(可能的複製http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in -java) –

+7

聽起來你真的應該使用集合或數組。具有多個變量,後綴爲1,2,3,4等通常是代碼味道。 –

+0

另外,你至少可以使用'Foo a = objectOne.objectTwo; Foo b = objectTwo.objectTwo;'然後比較'a.variableName1'和'b.variableName1'。請注意,使用公共字段也是一種代碼味道。 –

回答

1

這是可能的,只要變量名是唯一的(當然它必須是)具有Map做,如下所示:

Map<String, String> args = new HashMap<String, String>(); 
args.put("objectOne.objectTwo.variableName1", objectOne.objectTwo.variableName1); 
args.put(...); 
. 
. 
. 
for(int i = 0 ; i < 5 ; ++i) { 
    String firstString = "objectOne.objectTwo.variableName" + i; 
    String secondString = "objectTwo.objectTwo.variableName" + i; 
    if(args.get(firstString) == args.get(secondString)) 
     //more code 
} 

然而,動機正如Jon Skeet指出的那樣,可以持懷疑態度。

0

需要使用Java的Reflection API此處以獲得 「objectOne.objectTwo.variableName1」 真正的字段值, 「objectOne.objectTwo.variableName2」 和 「objectTwo.objectTwo.variableName1」, 「objectTwo.objectTwo.variableName2」

這裏是例子Get a variable value from the variable name

import java.lang.reflect.Field; 

public class Main { 
    public static void main(String[] args) throws Exception { 
    Object clazz = new TestClass(); 
    String lookingForValue = "firstValue"; 

    Field field = clazz.getClass().getField(lookingForValue); 
    Class clazzType = field.getType(); 
    if (clazzType.toString().equals("double")) 
     System.out.println(field.getDouble(clazz)); 
    else if (clazzType.toString().equals("int")) 
     System.out.println(field.getInt(clazz)); 

    //System.out.println(field.get(clazz)); 
    } 
} 

class TestClass { 
    public double firstValue = 3.14; 
} 
+0

似乎提問者沒有「變量」的清晰概念,就像您的(正確的)答案顯示的那樣。必須區分實例字段,靜態字段,本地等 –

+0

我是新來的Java,所以只是想讓我的頭繞着答案,但Jacek你是什麼意思必須明確的實例字段? – W22