【发布时间】:2010-12-04 23:52:29
【问题描述】:
考虑以下两个 Java 类:
a.) class Test { void foo(Object foobar) { } }
b.) class Test { void foo(pkg.not.in.classpath.FooBar foobar) { } }
此外,假设在类路径中找不到pkg.not.in.classpath.FooBar。
第一个类可以使用标准 javac 编译。
但是,第二个类不会编译,javac 会给你错误消息"package pkg.not.in.classpath does not exist"。
错误消息在一般情况下很好,因为检查您的依赖项允许编译器告诉您是否有某些方法参数错误等。
虽然在编译时检查依赖关系很好且很有帮助,但 AFAIK 并不严格需要在上面的示例中生成 Java 类文件。
您能否举个例子,如果不执行编译时依赖性检查,在技术上不可能生成有效的 Java 类文件?
您知道有什么方法可以指示 javac 或任何其他 Java 编译器跳过编译时依赖性检查吗?
请确保您的答案解决了这两个问题。
【问题讨论】:
-
唯一(有效的)解决方法是查找
MethodHandle,将其存储在static final字段中,并在MH 上使用invokeExact()和正确的类型提示。如果您需要的方法不止几种,那当然是相当乏味的。