Java 可以在运行时创建变量吗?

2023-11-25

例如,假设我想“提取”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(使用前将#替换为@)

Java 可以在运行时创建变量吗? 的相关文章

随机推荐

  • 在 PHP 中从 mySQL 表填充下拉框

    我正在尝试使用 Php 中的 mySQL 查询结果填充下拉框 我在网上查找了示例 并在我的网页上尝试过它们 但由于某种原因 它们根本没有填充我的下拉框 我尝试调试代码 但在我查看的网站上并没有真正解释 而且我无法弄清楚每一行代码的含义 任何
  • C++ 专用模板函数接收文字字符串

    我正在编写一个具有许多专业化的模板方法 class FieldValue public template lt typename T gt void Set const T value 其中之一是 template lt gt void F
  • 在 JavaScript 中检查对象是否可序列化的可靠方法

    是否有已知的方法或库已经有一个帮助程序来评估对象是否可以在 JavaScript 中序列化 我尝试了以下方法 但它不涵盖原型属性 因此它提供了误报 isEqual obj JSON parse JSON stringify obj 还有另一
  • SQL Server 中用于寻址表的正确语法是什么?

    这似乎是一个相当明显的问题 但我无法想出合适的术语来表达我想要问的问题 因此为此提供参考材料一直很棘手 不过 答案似乎很明显 在检查 SQL Server 的 Pluralsight 培训材料时 他们建议始终引用 常规 查询 您可能为基本
  • gradle 构建在 lint 任务上失败

    我有一个使用 Android Studio 0 4 0 创建的简单 Android 项目 我使用 Gradle 1 9 和 Gradle Android Plugin 0 7 昨天我添加了杰克 沃顿的黄油刀库在我的 gradle 构建脚本中
  • Ruby:获取变量名称[重复]

    这个问题在这里已经有答案了 如何获得变量名 例如 def get var name var return variable name end myname nil get var name myname gt myname 最初目的 som
  • 如何使用 setuptools 打包 Python 守护进程

    如何使用 setuptools 打包 Python 应用程序 以便在安装时 例如通过 setup py 或 pip 将守护程序脚本放置在适当的位置 启动它 并将其标记为在启动时自动启动 就我而言 我的代码仅适用于 Linux 因此我只关心在
  • 无法打开 Hibernate 会话以进行事务、JavaConfig

    找不到错误 Spring MVC Hibernate JavaConfig 网络应用程序配置 package com sprhib init import java util Properties import javax annotati
  • 春天@RequestMapping

    我不断看到这种参数value redirect id in a RequestMappingSpring 的注释 我一直想知道什么是 id 这里 这是某种Expression Language 我所看到的示例代码 RequestMappin
  • 每页打印一次背景图像

    我需要每页打印一次背景图像当我打印大的 html 文件时 现在它只打印在第一页上 所以 css 的部分是 media all body text align left background image url C logo png back
  • 画布中的真实鼠标位置

    我正在尝试用鼠标在 HTML5 画布上进行绘制 但似乎效果良好的唯一方法是 如果我出于某种原因更改画布位置 则画布位于位置 0 0 左上角 它没有像它应该的那样绘制 这是我的代码 function createImageOnCanvas i
  • 用于查找使用过多 CPU 的进程的命令[关闭]

    Closed 这个问题是无关 目前不接受答案 我可以使用什么命令来查找使用大量 CPU 的进程 我可以在不安装新东西的情况下执行此操作吗 或者使用您可以执行的其他一些实用程序 ps aux sort rk 3 3 head n 5 更改 h
  • 在 SQL Server 2005 中如何将多行组合成逗号分隔的列表?

    现在 我有一个像这样的 SQL 查询 SELECT X Y FROM POINTS 它返回的结果如下 X Y 12 3 15 2 18 12 20 29 我想在一行中返回所有结果 如下所示 适合在 HTML 标记中使用 XYLIST 12
  • Angularjs - 如何清除 $routeProvider 的 templateUrl 缓存

    我的应用程序中有非常基本的用例 其中我使用 AngularJS 1 0 8 作为前端 使用 Grails 作为后端 在应用程序布局中 我有一个语言切换器 允许用户更改语言 切换语言后 它会执行新的 http 请求来检索页面 Grails 会
  • Django - 模板显示模型 verbose_names 和对象

    我需要在模板中显示多个模型名称和对象 这是我的view def contents request Lists contents objects Model1 objects all Model2 objects all Model3 obj
  • PHP 函数重命名权限被拒绝

    在服务器中 脚本创建新文件夹 将 chmod 设置为 0777 但随后它尝试将文件移动到该文件夹 但出现错误 权限被拒绝 mkdir new 1 0777 chmod new 1 0777 mkdir new 1 new 2 0777 ch
  • 如何在 JavaScript 中获取两个日期之间的差异?

    我正在创建一个应用程序 它可以让您定义带有时间范围的事件 我想在用户选择或更改开始日期时自动填写结束日期 但是 我不太清楚如何获得两个时间之间的差异 以及如何使用该差异创建新的结束日期 在 JavaScript 中 可以通过调用将日期转换为
  • Font Awesome 未出现在 Internet Explorer 8 中

    我们最近开发了一个网站 其设计强烈依赖 Font Awesome 我们使用 before content 及其提供的 CSS 的标准实现 由于某些原因 Font Awesome 未在 IE8 中显示 我花了相当多的时间进行故障排除并尝试各种
  • jQuery:如何在元素显示时调用函数

    我想在 div 显示时 显示后 调用一个函数 有谁知道我该怎么做 我尝试使用类似的东西 someDiv bind show function alert example 但我不确定我是否以正确的方式做到这一点 或者是否可能实现这一点 有任何
  • Java 可以在运行时创建变量吗?

    例如 假设我想 提取 String fruits Pear Banana Apple 分成三个独立的变量 例如 for int i 0 i fruits length i of course there s no eval in Java