【问题标题】:How Auto Complete in java works with Reflection?java中的自动完成如何与反射一起使用?
【发布时间】:2014-05-22 10:50:18
【问题描述】:

我听说Eclipse使用反射来提供它的自动完成功能。但是它实际上是如何工作的?我搜索了谷歌,但没有找到关于它的好文章。谁能解释一下过程或提供任何有用的文章.提前致谢。

【问题讨论】:

  • 它不使用反射。它使用Abstract Syntax Tree
  • +1 ,谢谢。这正是我正在搜索的内容。仍然可以通过反射实现吗?只是出于好奇而想知道。

标签: java eclipse reflection autocomplete


【解决方案1】:

反射 API 只能告诉您正在运行的代码(或者至少,它已加载到程序中,处于完全编译状态,可以运行)。当您编辑代码时,它没有运行,也没有加载到 JVM 中,因此不可能使用反射来检查它。 Eclipse 的自动完成中还有一些信息永远无法通过反射获得,例如本地(方法内)变量的名称。

相反,Eclipse 有自己的编译器。它直接读取源代码并使用它来构建自己对可用类、方法、构造函数、字段和局部变量的理解。该信息被包括自动完成在内的多种编辑功能所使用。

此外,当源代码不可用时,Eclipse 可以通过直接读取已编译的 .class 文件来获取自动完成的部分信息。 .class 文件结构is fully documented.(这只是“部分”信息的原因有几个。一方面,如果在没有调试信息的情况下编译类,它不包括有关局部变量的信息。它通常也不包括方法参数名称。(Java 8在类文件格式中新增了“MethodParameters”属性,可用于记录方法参数名称,但javac默认不这样做。)

我不是 Eclipse 内部的专家,但我认为/希望这是准确的。

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2017-07-13
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多