2016-11-05 5 views
0

У меня есть две переменные, которые я пытаюсь сравнить, но имена переменных длинны, и я пытаюсь очистить свой код, весь код здесь просто используется в качестве примера ,Использование String для ссылочного значения переменной переменной

То, что я хочу сделать что-то вроде этого:

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 
} 

однако это сравнение строк, и я пытаюсь использовать сами строки в качестве ссылки на различные переменные, есть ли способ сделать это?

EDIT: Я ищу, чтобы очистить код, но главная проблема, с которой я столкнулся, - это если у меня было 100 переменных переменныеNameNumber, мне пришлось бы делать 100 отдельных операторов if, я пытаюсь сделать это простым для цикла, как я увеличиваю имена переменных обновляются

+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 
} 

Однако мотивация может быть скептически, как указывает Джон Скит.

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, поэтому просто пытаюсь найти ответ, но Яцек, что вы имеете в виду, должен иметь отдельное поле экземпляра? – W22

Смежные вопросы