例如,假设我想“提取”String[] fruits = {"Pear", "Banana", "Apple"};
分成三个独立的变量,例如:
for (int i=0; i != fruits.length; ++i) {
// of course there's no eval in Java
eval("String fruit + i = " + fruits[i] + ";");
}
// ie: code that creates something equivalent to the following declarations:
String fruit0 = "Pear";
String fruit1 = "Banana";
String fruit2 = "Apple";
我怎么能做到这一点,忽略“你到底为什么要这么做?”您可能会被要求问我的问题。
类似的问题以前已经被问过很多次,但从未给出真正的答案,因为OP真正需要的是使用不同的方法。很好,但这可能吗?
我研究过反射,似乎没有任何方法可以让我向实例添加额外的字段,更不用说动态创建局部变量了。
Java 可以在运行时创建变量吗?
简单回答是不。
Java 是一种静态语言,不支持将新的变量声明注入到现有的已编译程序中。还有其他选择(按照有用性递减/难度递增的顺序):
- 将您的“变量”表示为名称/值对
Map
。或者想出一些其他不具备的设计require真实的动态变量。
- 使用在 JVM 上运行并可从 Java 调用的脚本语言。
- 使用某种模板机制生成包含声明的新源代码,并动态编译和加载它。
- 使用字节码操作库(例如 BCEL)动态创建类文件,然后动态加载它们。
第一种方法是最好的。 Java 是一种静态语言,如果你不对抗它,效果最好。如果这对您来说是个问题,也许您使用了错误的语言。
最后两个是困难/复杂的并且具有显着的性能成本。他们几乎肯定不会提供帮助......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)