我可以告诉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而被标记?那么:编译器到底在哪里抱怨,它到底说了什么?