编译部分Java代码

编译部分Java代码,java,compilation,Java,Compilation,我试图研究Java的单独编译,特别是编译一个没有它所依赖的所有类/接口的类 例如,假设我有以下文件Foo.java: public class Foo extends Bar{ //class body } 但是没有用于Bar的java/class文件。我正在寻找允许我单独编译Foo.java并在稍后阶段添加其依赖项的工具 任何关于如何做到这一点的信息都会有所帮助,从关于该主题的论文以及如何做到/不能做到这一点,到现有的工作工具/框架,这些工具/框架都可以做到这一点。通常在java中,如果

我试图研究Java的单独编译,特别是编译一个没有它所依赖的所有类/接口的类

例如,假设我有以下文件Foo.java:

public class Foo extends Bar{
  //class body
}
但是没有用于Bar的java/class文件。我正在寻找允许我单独编译Foo.java并在稍后阶段添加其依赖项的工具


任何关于如何做到这一点的信息都会有所帮助,从关于该主题的论文以及如何做到/不能做到这一点,到现有的工作工具/框架,这些工具/框架都可以做到这一点。

通常在java中,如果您使用反射api编码,那么只有您的代码可以独立构建,因为所有解析都是在运行时完成的。Class.forName不要求类在编译时出现。但这意味着您必须以非常复杂的方式重写类的简单代码,这在尝试定义简单的POJO类时有时是一种开销,在本例中就是这样。请解释整个场景或这样做的要求,这可能有助于其他人提出其他建议,因为从更大的角度看有时会有所帮助,但这是不可能做到的,因为不应该存在未经验证的字节码

然而,人们可以通过一些语法工具进行句法验证

可以绕过实际的实现类对接口进行编译

在Java9中,出现了交互式shell JShell,REPL,它允许独立地创建声明和语句;部分代码

这是值得怀疑的,是否其中之一是你正在寻找的。
也许可以切换到JavaScript的下一个区域。

我必须问一下-在什么情况下这很重要?我正在寻找工具。。。您应该首先看看这里的主题是什么类型的问题。接口的目的是提供有关可以在对象上调用的方法的信息。在没有字节码的情况下,编译器如何知道存在哪些方法以及它们的签名是什么样的?您可能会想到的是一个单独的API jar,它随所有接口一起提供,可以与一个或多个提供接口实现的impl jar一起使用。在这种情况下,如果不了解Bar,就无法确定Foo是否有效。具体来说,我们需要知道Bar是否是最终的,这将使Foo整体无效。Joe有正确的解释,为什么你应该忘记这个想法。假设Bar将toString定义为final。你的酒吧试图覆盖toString。在不知道Foo的情况下,这将是合法的-但在调查Foo时。。。它是无效的。现在怎么办?我的建议是:忘掉这个想法。