【问题标题】:Is it possible to use a String instead of a variable name in Java是否可以在 Java 中使用字符串而不是变量名
【发布时间】:2011-11-24 09:00:01
【问题描述】:

我创建了 3 个变量

收音机1 收音机2 收音机3

是否可以使用 for 循环并从名为“radio”的字符串中添加计数器以获取变量?

比如这样的

for(i=1;i<=3;i++)
    if(("radio" + i).method())
          do something

提前致谢

【问题讨论】:

  • 不,检查数组。从技术上讲,反射是对此的回答......就像“使用标准库构建一种以这种方式执行的语言”在技术上是对“函数 X 执行 Y,我希望它执行 Z”的回答。
  • 就他的问题而言,反思不是答案。
  • @Saket:同意 Johan 的观点:反射不是解决整体问题的方法,当简单的数组或哈希图可以轻松解决这个问题时,它会增加额外的危险而没有好处。
  • 在 Java 中,重要的不是变量名,它在代码运行时几乎不存在,而是对您的对象的引用。数组或地图可以很好地做到这一点。

标签: java string variables


【解决方案1】:

您可以使用 Radio 对象并改用数组:

Radio[] radios = new Radio[] {radio1, radio2, radio3};
for(i=0;i<3;i++)
    if(radios[i].method())
          do something

如果你想通过命名变量来访问变量,你也可以使用Java's reflection API。但这是一项昂贵的操作,一般不建议这样做。

【讨论】:

    【解决方案2】:

    在我看来,您想使用 Dictionary 或类似的数据结构,这样您就可以存储由例如字符串索引的对象。

    编辑

    正如一些人所说,HashMap 是一种更现代、更好的选择。

    【讨论】:

    • 请注意,DictionaryHashtable 已被弃用了一段时间。请为新代码或新编码员推荐这些。
    • 同意 - 应该使用 Map 实现。
    • @A.H.虽然我自己会推荐 HashMap,但 Hashtable 已被弃用,并且已经用泛型进行了改造。 (字典已过时;-)
    • Hashtable 不是@deprecated,但它已被“弃用”。强制同步开销、一些重复的方法和良好的替换 HashMap 足以证明这一点。另请注意,这两个类都已改装为泛型,因此这不是没有@deprecated 的唯一弃用标准。
    • 对不起,C# 最近在脑子里!让我更正一下输入。
    【解决方案3】:

    您应该使用array,这样您就可以轻松地遍历所有这些。

    如果您不知道会有多少项目,您也可以使用列表。

    【讨论】:

      【解决方案4】:

      最方便的方法是使用这样的中间数组:

      Radio radio1, radio2, radio3;
      for(Radio radio: Arrays.asList(radio1, radio2, radio3))
          if( radio.method() )
              doSomething();
      

      java.util.Arrays 由 JDK 提供。

      这行得通。但请想一想,有多少次你真的想要三个独立的Radio 实例,有多少次你对其中一个不感兴趣,但对所有实例感兴趣。在后一种情况下,将三个实例放入 Collection 或从一开始就放入一个数组中,然后忘记三个单独的实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-23
        • 2017-03-24
        • 1970-01-01
        • 2012-04-01
        • 1970-01-01
        相关资源
        最近更新 更多