Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 I*绑定在EclipseJDT中的作用是什么?_Java_Eclipse_Eclipse Jdt - Fatal编程技术网

Java I*绑定在EclipseJDT中的作用是什么?

Java I*绑定在EclipseJDT中的作用是什么?,java,eclipse,eclipse-jdt,Java,Eclipse,Eclipse Jdt,我目前的理解是,JDT为我们提供了两种不同的接口和类层次结构,用于表示和操作Java代码: Java模型:提供一种表示Java项目的方法。快到 创建但不包含与AST类一样多的信息 例如,没有关于层次结构的可用信息 每个元素在源文件中的确切位置(在AST中为 可用) AST:源代码plus提供了更详细的表示 操纵它的方法 对吗 现在,还有一个名为I*Binding(起始于)的接口层次结构,例如IMethodBinding。例如,我们有3种不同类型的方法: (来自Java模型) (来自AST,

我目前的理解是,JDT为我们提供了两种不同的接口和类层次结构,用于表示和操作Java代码:

  • Java模型:提供一种表示Java项目的方法。快到 创建但不包含与AST类一样多的信息 例如,没有关于层次结构的可用信息 每个元素在源文件中的确切位置(在AST中为 可用)

  • AST:源代码plus提供了更详细的表示 操纵它的方法

对吗

现在,还有一个名为I*Binding(起始于)的接口层次结构,例如IMethodBinding。例如,我们有3种不同类型的方法:

  • (来自Java模型)
  • (来自AST,可以从IMethod获得)

从doc来看,IMethodBinding看起来很像AST中的MethodInvocation,但我看不出有什么明显的区别,我应该在什么时候使用它们。有人能澄清一下吗?

原始AST节点之间不包含引用,例如从变量使用返回到其声明,或从方法调用返回到方法声明。可以检查MethodInvocation对象的方法名,但您无法立即了解实际调用的是哪个类的哪个方法。为此,需要进行范围分析

这种分析称为绑定解析。IBinding对象附加到AST节点,您可以使用它们来查找给定MethodInvocation AST节点的MethodDeclaration AST节点,例如使用
CompilationUnit.findDeclaringNode(methodInvocationNode.resolveMethodBidning().getKey())

或者您可以使用
compileationunit.findDeclaringNode(method.getKey())
查找哪个AST节点包含与给定IMethod对象对应的声明

MethodInvocation.resolveBinding().getKey() ==
MethodDeclaration.resolveBinding().getKey() ==
IMethod.getKey()

哇,谢谢你,曼特里德!这对我来说是理解这一点的重大突破!请告诉我如何从IMethod获取MethodInvocation,好吗?