Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java代码中插入java文件_Java - Fatal编程技术网

如何在java代码中插入java文件

如何在java代码中插入java文件,java,Java,我想知道是否有办法将动态更改代码的代码导入到主代码中。大概是这样的: Main: int x; (insert input.java) input.java的内容: x = 2; 我可以将input.java中的代码导入主代码吗?java在源代码编译时没有include指令 它也没有用于在运行时评估新Java源代码的eval 将新Java代码放入正在运行的Java VM的唯一真正方法是通过类加载 然而,自从javax.script(Java6)问世以来,一个得到充分支持的运行时(例如,来自J

我想知道是否有办法将动态更改代码的代码导入到主代码中。大概是这样的:

Main:
int x;
(insert input.java)
input.java的内容:

x = 2;

我可以将
input.java
中的代码导入主代码吗?

java在源代码编译时没有include指令

它也没有用于在运行时评估新Java源代码的eval

将新Java代码放入正在运行的Java VM的唯一真正方法是通过类加载


然而,自从javax.script(Java6)问世以来,一个得到充分支持的运行时(例如,来自Java8的Nashorn Javascript实现)可以导入和评估一些脚本代码,这些代码可以调用回Java API。这是一个巨大的主题&太大了,无法在这里深入讨论。

Java没有与
eval
等价的结构,也没有任何其他能够在运行时评估代码的结构。它完全能够解析外部数据,如XML,并对发现的内容采取行动。它还可以启动和捕获外部进程的输出,这些输出很可能是动态生成的代码。此过程的细节因您的操作系统而异。

您所说的“动态更改代码”是什么意思?i、 这里的用例是什么?如果你的意思是像c的include指令,绝对不是。Java的大部分设计都是围绕着不必做这样的事情而构建的。你是指编译时还是运行时?如果您想在编译时包含来自另一个源文件的一个源文件,正如jjm所说,答案是肯定的“否”——java语言不支持这一点。如果您试图在运行时包含代码,理论上有一些方法可以做到,但没有直接的方法,这几乎肯定不是一个好主意。您想要完成的是什么?只是一个想法:也许某些编译工具具有此功能。例如,前一段时间,我们讨论了如何有条件地删除方法声明,就像C对
#ifdef
所做的那样。我知道用java是做不到的;我不知道的是,有了蚂蚁你可以。您可以指定ant在编译之前必须查找的一些“特殊”注释,以及在找到这些注释时它的行为方式。也许有一种方法可以用Ant来实现
包含
s?当然,如果有某种预编译过程来生成代码,那么这将是可行的,但这将意味着其他所有人都必须遵循您的构建过程,并且您的IDE无法正确处理这些文件,一种可能是有一个初始的预处理步骤,从非Java格式(BNF语法或其他)生成源代码&然后从那时起使用普通Java。但这并不是一个真正想要的“包括”。