【问题标题】:How do I create a variable within another variable? [duplicate]如何在另一个变量中创建一个变量? [复制]
【发布时间】:2012-09-08 22:21:19
【问题描述】:

可能重复:
Dynamic Variable Names in Java:

假设我有一个字符串,如下所示。

String s = "Hello";

现在,我想创建一个字符串,但字符串的变量将被称为“Hello”。为了使字符串的名称为“Hello”,我必须访问字符串s 以获取名称“Hello”,以便将其用作变量名。下面是我想看到的。

String Hello = "I want to do this, But from Accessing String s So I KNOW that String s = Hello";

感谢您的努力,请尝试向我解释,因为我是 Java 初学者。 :D

【问题讨论】:

  • 1.你为什么要这样做?可能有更好的方法来做你想做的事...... 2. 它可以通过反射 API 来完成,这对于 Java 初学者来说并不容易掌握。
  • 同意@Sayem 并投票结束。海报请查看 Sayem 提供的链接。正如这里和链接中所指出的,这不是 Java 的 方式。如果要将字符串变量与字符串相关联,最好使用Map<String, String>
  • 如何使用反射来完成? Java 中没有动态变量。
  • @Anton:反射可以用于类字段,而不是局部变量。但同样,这将是一个可怕的丑陋组合,不推荐。要了解如何执行此操作,请查看 Sayem 提供的链接。
  • @Hovercraft 满满的鳗鱼。反射无法帮助在运行时创建变量。使用反射你不能访问局部变量。它甚至没有接近 OP 代码。

标签: java string variables


【解决方案1】:

您尝试做的是添加一个间接层。不能在 Java/C/C++/Pascal/etc 等静态语言中动态访问变量

你可以做的是模拟动态语言使用的动态上下文,例如创建一个 Map 来保存变量名称和值,在这种情况下你会拥有

Map<String,String> stringVars = new HashMap<String,String>();

// set a "variable"
stringVars.put("Hello", "value");

// get a "variable"
System.out.println(stringVars.get("Hello"));

【讨论】:

    【解决方案2】:

    使用反射(不推荐):

    public class MainClass
    {
        public String Hello = "I want to do this, But from Accessing String s So I KNOW that String s = Hello";
    
        public static void main(String[] args) throws Exception
        {
            MainClass m = new MainClass();
    
            String s = "Hello";
            String result = (String) MainClass.class.getField(s).get(m);
            System.out.println(result);
        }
    }
    

    输出:

    I want to do this, But from Accessing String s So I KNOW that String s = Hello
    

    改为使用其他地图所示的地图。

    【讨论】:

      【解决方案3】:

      这在java中是不可能的。

      您唯一能做的就是使用map 接口的实现,例如HashMap。使用put 方法,您可以为给定的“名称”“分配”一个值。该名称将是 key 并且在映射中必须是唯一的,就像变量在其范围内具有唯一名称一样。

      要检索value,请调用get 方法并传递适当的key(例如字符串'Hello')作为参数。

      【讨论】:

      • 实际上 在技术上可以使用类字段,尽管不推荐。这种事情已经在这里讨论了一遍又一遍。
      • 同意,可以如Eng.Fouad's post所示。然而,大多数行为都可以使用基本的 java 接口来实现。当绝对无法避免时,应该使用反射。
      【解决方案4】:

      在 Java 中,您无法获取指向对象的变量(引用)名称,因为该对象不知道对它的引用,并且可以有多个变量引用同一对象。

      另一方面,您可以这样做;但我不知道有什么帮助:

      String s = "Hello";
      Reference<String> hello = new SoftReference<String>(s);
      String myStringAccessedWithHello = hello.get();
      

      【讨论】:

        【解决方案5】:

        你能不能使用一个 Map,它接受一个字符串(例如“Hello”)并将其映射到另一个字符串(例如“我想这样做,但是通过访问 String s 所以我知道 String s = Hello”) .类似于以下内容:

        Map<String, String> stringMap = new HashMap<String, String>();
        stringMap.put("Hello", "I want to do this, But from Accessing String s So I KNOW that String s = Hello");
        

        然后你可以通过调用找到map中所有的键值(比如“Hello”):

        Set<String> stringKeys = stringMap.keySet();
        

        您可以像这样查找属于键“Hello”的长字符串:

        String longValue = stringMap.get("Hello");
        

        这就是我将如何使用一个简单的字符串值来查找一个笨拙的字符串值。请记住,您还可以使用 Map 将 String 值映射到任何其他类型的对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-10
          • 1970-01-01
          • 1970-01-01
          • 2019-07-31
          • 2020-11-09
          • 2019-08-16
          相关资源
          最近更新 更多