将字符串值用作变量名

12

是否可以使用字符串作为变量名,就像这个例子:

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
2
Java不支持变量的动态命名。 - Maroun
不,这是不可能的。但是你可以使用 Map<String, Music> map。然后执行 if(map.get(musicPlaying).stillPlaying) - Alexis C.
请查看此链接 - arshajii
@ᴍarounᴍaroun 没关系,你没有失礼,是我的问题,如果你今天工作太多了,只需听些好音乐,放松一下,一切都会很好的,祝你有愉快的一天 :) 让我们不要在这里刷屏,否则我们会被举报的 :) - julian
显示剩余5条评论
5个回答

15
您可以通过将这些值与音乐对象关联(映射)来实现。以下是示例:
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)不返回nullMusic m = musics.get(musicPlaying); if(m!= null &&!m.stillPlaying){ changeMusic(); } - Alexis C.
@ZouZou:如果你正确地封装了东西,musicPlaying 就会始终是一个有效的键(使 musics.get(musicPlaying) 始终是一个 Music)-- 如果它不是,那就是一个错误。你不一定要检查 null,因为从长远来看,在这种情况下得到 NPE 比用 null 检查掩盖它更好。 - cHao

6
你无法在Java中这样做,但你几乎可以使用Map实现。
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

不,Java不支持这个。

stillPlaying 不是 String 类的方法(或变量)。

如下方的评论所示,可能可以通过一些反射实现,但引用另一个评论的话...

你可以使用各种愚蠢的反射技巧。但是在你这样做的瞬间,你基本上已经违反了类上的“保修无效”的标签。


1
哇!我的话被引用了! :) - cHao
向您卑微地脱帽致敬,因为您具有卓越的反射知识。 :D - David

1
不行。但您可能希望考虑使用地图代替。

是的,已经有人给我展示过了。顺便说一下,我喜欢你的个人资料图片,生命游戏,就像旧日那样吗?当编程看起来像是一个游戏 :) - julian

-4

我使用了一个switch case语句。

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

你能解释一下这与 OP 的问题有什么关系吗? - runDOSrun
字符串是动态的。我们永远不知道它将会是什么,但无论它是什么,都有另一个同名的变量,当字符串变量被赋值时,该变量可能已经设置好了。因此,要“使用字符串值作为变量名”,然后根据字符串调用变量(或方法)名称进行切换。 - rupweb
1
请再仔细阅读。OP的问题不是关于一般字符串,而是动态变量名。使用字符串的switch case并不能解决这个问题。如果能够使用“变量名”(而非值)的switch case将会有所帮助,但是正如上面所有人指出的那样,在Java中这是不可能的。 - runDOSrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接