2014-01-07 3 views
9

Можно ли использовать строку в качестве имени переменной .. как в этом примере -Чтобы использовать строковое значение в качестве имени переменной

String musicPlaying = "music2"; 
Music music1 = new Music("blaalla"); 
Music music2 = new Music("blalala"); 
Music music3 = new Music("balaada"); 

if(!musicPlaying.stillPlaying) { // As you can see i am using string as a variable name. 
    changeMusic(); 
} 
+1

Я не понимаю ваш вопрос. В примере вы этого не делаете. Вы вызываете * конструктор *. – Maroun

+0

Я уверен, что ваш вопрос не выражен в вашем коде. –

+2

@RuchiraGayanRanaweera Java не поддерживает динамическое именование переменных. – Maroun

ответ

12

Что вы можете сделать, это связать (сопоставление) этих значений с объектом Music. Вот пример:

Map<String, Music> musics = new HashMap<>(); 
String musicPlaying = "music2"; 
musics.put("music1", new Music("blaalla")); 
musics.put("music2", new Music("blalala")); 
musics.put("music3", new Music("balaada")); 

if(!musics.get(musicPlaying).stillPlaying) { // As you can see i am using string as a variable name. 
    changeMusic(); 
} 
+1

@IsraelG. Если вы не хотите, чтобы NPE был выброшен, убедитесь, что 'musics.get (musicPlaying)' не возвращает 'null'. 'Music m = musics.get (musicPlaying); if (m! = null &&! m.stillPlaying) { changeMusic(); } ' –

+0

@ZouZou: Если вы правильно инкапсулируете вещи,' musicPlaying' всегда будет действительным ключом (создание 'musics.get (musicPlaying)' всегда будет 'Music') - и если когда-либо это не , Это ошибка.Вы не обязательно хотите проверить значение null, потому что в конечном счете вы будете лучше * получать NPE в таких случаях, чем подметать его под ковер с нулевой проверкой. – cHao

3

Нет, это не поддерживается в Java.

stillPlaying не существует как метод (или переменная) на String.

Как комментарий говорит ниже, это, вероятно, выполнимо через некоторое отражение, однако процитировать еще один comment ...

Вы можете сделать все виды глупых трюков с отражением. Но вы - , в основном, сломав стикер «void void if removed» в классе , как только вы это сделаете.

+1

Woo! Я процитирован! :) – cHao

+0

* колпак к вашим превосходным знаниям отражения *: D – david99world

1

Нет. Но вместо этого вы можете изучить Карту.

+0

Да, люди уже показали мне .. btw Мне нравится изображение вашего профиля, игра жизни, как и в старые времена? когда программирование выглядело как игра :) – Israelg99

5

Вы не можете сделать это на Java, но вы можете почти сделать это с помощью карты.

Map<String, Music> map = new HashMap<String, Music>(); 
map.put("music1", music1); 
map.put("music2", music2); 
map.put("music3", music3); 

if(map.get(musicPlaying).stillPlaying) { 
    // happy listening 
} 
-3

Я использовал футляр для переключателя.

Switch (string) 
{ 
    case "string1": 
    string1(); 
    break; 
    case "string2": 
    string2(); 
    break; 
} 
+0

Можете ли вы объяснить, как это связано с вопросом OP? – runDOSrun

+0

Строка динамическая. Мы никогда не знаем, что это будет, но что бы это ни было, есть еще одна переменная с тем же именем, которая, вероятно, устанавливается, когда переменная строки заполняется чем-то. Поэтому, чтобы «использовать строковое значение в качестве имени переменной», затем переключите его с именем переменной (или методом), вызываемым в соответствии со строкой. – rupweb

+1

Прочтите еще раз. Вопрос OP заключается не в строках в целом, а в динамических именах переменных. Случай с коммутацией строки не решает проблему. Случай с переключателем «имена переменных» (не значения) помог бы, но это невозможно в Java, как все указали выше. – runDOSrun

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