像:
import com.xxx.utility.*;
class MyClass{
public static void main(String[] args){
MyUtiliy ut = new MyUtiliy();
MyUtility.doAdd(5, 6);
.......
}
}
当放“。”在MyUtiliy之后,eclipse将告诉你所有可以使用的方法,eclipse如何实现这个目标?
eclipse是否会动态使用反射? (比如this thread的回答?)
答案 0 :(得分:0)
eclipse软件的体系结构在6.1.2节中描述here。 Java开发工具(JDT)简要介绍了使用的增量构建系统。该系统将具有填充自动完成机制的所有相关信息。
对于确切的机制,你必须查看eclipse源代码。
答案 1 :(得分:0)
是Eclipse(以及任何其他Java IDE)使用反射。
如果Eclipse为每个项目的库使用ClassLoader,那么它会在jar文件中加载类,之后一切都很简单,它可以使用反射获取信息。
顺便说一句,java IDE不仅使用反射,还读取类调试信息,提取参数名称等等。
答案 2 :(得分:0)
this article中有解释。基本上,Eclipse Java编译器构建了代码的抽象语法树(AST),使其能够非常快速地找到自动完成所需的所有信息。
所以它没有使用反射,而是将代码编译成内部形式以便快速访问。
当没有可用的源代码(你只有一个.class文件)时,仍然可以构造AST的一部分,其中包含完成所需的类方法和类型。这似乎是通过直接读取.class文件而不是使用类加载器(org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader
)来完成的。