Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java eclipse如何在jar文件中推断类的方法_Java_Eclipse_Jar - Fatal编程技术网

Java eclipse如何在jar文件中推断类的方法

Java eclipse如何在jar文件中推断类的方法,java,eclipse,jar,Java,Eclipse,Jar,比如: 当在MyUtility后面加上“.”时,eclipse将告诉您可以使用的所有方法,eclipse是如何实现这一点的 eclipse使用即时反射吗?(如答案?第6.1.2节描述了eclipse软件的体系结构。Java开发工具(JDT)它简要描述了所使用的增量构建系统。该系统将具有填充自动完成机制的所有相关信息 对于确切的机制,您必须查看eclipse源代码。是的,eclipse(和任何其他JavaIDE)使用反射 如果事实上Eclipse为每个项目的库使用类加载器,那么它将类加载到jar文

比如:

当在MyUtility后面加上“.”时,eclipse将告诉您可以使用的所有方法,eclipse是如何实现这一点的


eclipse使用即时反射吗?(如答案?

第6.1.2节描述了eclipse软件的体系结构。Java开发工具(JDT)它简要描述了所使用的增量构建系统。该系统将具有填充自动完成机制的所有相关信息

对于确切的机制,您必须查看eclipse源代码。

是的,eclipse(和任何其他JavaIDE)使用反射

如果事实上Eclipse为每个项目的库使用类加载器,那么它将类加载到jar文件中,然后一切都很简单,它可以使用反射获取信息


顺便说一句,JavaIDE不仅使用反射,还读取类调试信息,提取参数名等等。

中有一个解释。基本上,EclipseJava编译器会为代码构建一个抽象语法树(AST),让它能够快速找到自动完成所需的所有信息

因此,它并没有为此使用反射,而是将代码编译成一种内部形式,以便快速访问


当没有可用的源代码时(您只有一个.class文件),仍然可以构造包含完成所需的类方法和类型的AST部分。这似乎是通过直接读取.class文件来完成的,而不是使用类加载器(
org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader

eclipse有自己的java编译器;但是您当然可以通过反射来实现它。您认为JVM如何知道存在哪些方法?如果这不是一个微不足道的问题,那么Java生态系统将如何工作呢?感谢您的回复,您提供的链接确实清楚地解释了这一点。
import com.xxx.utility.*;
class MyClass{
    public static void main(String[] args){
        MyUtiliy ut = new MyUtiliy();
        MyUtility.doAdd(5, 6);
        .......
    }    
}