我可以告诉javac忽略缺少import foo.Bar吗?

我可以告诉javac忽略缺少import foo.Bar吗?,java,import,compilation,javac,compiler-optimization,Java,Import,Compilation,Javac,Compiler Optimization,我正在使用反射在运行时加载MyClass.class(一个外部文件) MyClass.class使用库Bar,这意味着我需要放置import foo.Bar位于文件顶部 但是,Bar库已经加载到主类加载MyClass中 我有没有办法告诉javac忽略Bar是不存在的,直接编译而不使用它 不,这是不可能的。编译类时,编译器没有已经“加载”的类的“内存”(不要将其与类加载相关的概念混淆——这是完全不同的情况)。每当编译一个类并且发现对一个不在同一个包中的类的引用时,就需要一个import语句 话虽如

我正在使用反射在运行时加载
MyClass.class
(一个外部文件)

MyClass.class
使用库
Bar
,这意味着我需要放置
import foo.Bar位于文件顶部

但是,
Bar
库已经加载到主类加载
MyClass


我有没有办法告诉javac忽略
Bar
是不存在的,直接编译而不使用它

不,这是不可能的。编译类时,编译器没有已经“加载”的类的“内存”(不要将其与类加载相关的概念混淆——这是完全不同的情况)。每当编译一个类并且发现对一个不在同一个包中的类的引用时,就需要一个
import
语句


话虽如此,您的问题中似乎存在矛盾:从您所说的来看,
MyClass
已经编译,因为文件
MyClass.class
存在,所以这里没有涉及编译器。是类加载器进行加载。在这种情况下,就类加载器而言,如果主类中已经引用了
Bar
,那么它就不会从
MyClass

中再次加载了。不,javac命令中没有这样的选项。

我觉得您可能没有回答问题的一个重要方面:MyClass.class已经存在,所以这不是你要编译的。那么,您需要将
import foo.Bar
声明放在哪里?您是否有自己的代码类明确引用了
MyClass
(不是通过反射)?类是否因为间接需要编译器找不到的Bar而被标记?那么:编译器到底在哪里抱怨,它到底说了什么?