编译没有依赖项的Java代码
参见英文答案 >
Is it possible to compile a java file without providing its depedencies?4个
我有一个java程序的源代码,但我没有它的依赖项.是否可以编译使用无法解析的字段,类和方法的Java代码?如果没有,是否有一个程序或Eclipse插件会自动生成在编译期间无法解决的假类,变量和方法?请举例. public class Main { public static void main(String[] args) { // ... UnknownClass.unknownMethod(); } } 我希望它使用方法unknownMethod()自动生成Class UnknownClass: public class UnknownClass { public static void unknownMethod() {} } 但是不要在输出.jar中导出它
不可以.源代码的静态依赖项必须在编译时都可用.
AFAIK,没有. 事实上,我认为在技术上建立这样一个程序是不可能的.这将需要推断我们没有任何信息的类和方法的签名.我认为不可能准确地做到这一点;即足够准确,以使签名与真实类的实际签名相匹配. (需要解决的一些问题是推断类的正确超类型,推断参数和方法结果的正确类型,推断方法是否具有变量,推断方法是否存在重载等等.这些问题很容易处理,有些肯定不是.)
我想你已回答了自己的问题.类层次结构和方法标头位于提供的Bukkit JAR文件中.因此,不需要推断它们. 相比之下,您要求在这里做的是从干净的平板推断类层次结构和方法签名…以及使用它们的代码(您的源代码)隐含的一些约束. 这是一个例子: UnknownClass c = ... c.method(42); c.method(42.0); 有多种不同的解决方案: public class UnknownClass ... { void method(double arg) {...} } public class UnknownClass ... { int method(double arg) {...} } public class UnknownClass ... { void method(int arg) {...} void method(double arg) {...} } public class UnknownClass ... { void method(byte arg) {...} void method(double arg) {...} } public class UnknownClass ... { void method(double... arg) {...} } 等等. 问题:哪个是正确的;即与真实UnknownClass中的实际签名匹配的那个? 答:我们无从得知!它很重要,因为如果我们弄错了,当您尝试针对包含真实类的JAR运行编译代码时,可能会出现类加载器错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |