Java中的“this”关键字在Eclipse内容辅助中被标记为静态

18

有没有人知道在Eclipse的内容辅助功能中为什么this关键字(Java)被标记为static finalfinal对我来说是有意义的,但为什么要用static

Eclipse屏幕截图

这个屏幕截图是使用Eclipse 2020-03制作的,但我观察到了多年的这种行为。


1
非常有趣的问题。 :) +1 - Anish B.
2个回答

14

完成这个功能的代码在org.eclipse.jdt.internal.ui.text.java.ParameterGuesser中。

// add 'this'
if (currentType != null && !(fEnclosingElement instanceof IMethod && Flags.isStatic(((IMethod) fEnclosingElement).getFlags()))) {
  String fullyQualifiedName= currentType.getFullyQualifiedName('.');
  if (fullyQualifiedName.equals(expectedType)) {
    ImageDescriptor desc= new JavaElementImageDescriptor(JavaPluginImages.DESC_FIELD_PUBLIC, JavaElementImageDescriptor.FINAL | JavaElementImageDescriptor.STATIC, JavaElementImageProvider.SMALL_SIZE);
    res.add(new Variable(fullyQualifiedName, "this", Variable.LITERALS, false, res.size(), new char[] {'.'}, desc));  //$NON-NLS-1$
  }
}

那段代码中关键的部分是

JavaElementImageDescriptor.FINAL | JavaElementImageDescriptor.STATIC

JavaElementImageDescriptor中,标志很难编码显示静态和final覆盖图像。因此,这些总是为this显示。

至于为什么选择这样做,代码没有给出任何原因。


非常感谢,很有趣!我想知道他们为什么选择了这种方法。你认为将this视为静态的逻辑原因是什么? - user7291698
3
不,我想不出任何理由。对我来说这似乎没有意义,在Java语言规范中也没有发现任何问题。你可以尝试在Eclipse Bugzilla(https://bugs.eclipse.org/bugs)中报告此问题作为一个错误。 - greg-449
@greg-449 很好的回答。我不知道这个。+1 - Anish B.

0

有两个原因。1)this 不能被重新分配,2)你在构造函数中而不是普通方法中。


在我看来,你的第一个观点是使用final的原因,而不是使用static的原因。至于你的第二个观点:实际上,我在初始化程序中,而不是在构造函数中。但无论如何,这都不重要,因为内容辅助在初始化程序、构造函数和普通方法中显示相同的行为。 - user7291698

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接