Java "this"-在 eclipse 内容辅助中标记为静态的关键字
Java "this"-keyword marked as static in eclipse content assist
有人知道为什么在Eclipse 的内容帮助中this
关键字(Java) 被标记为static final
的原因吗? final
对我来说有意义,但为什么 static
?
屏幕截图是使用 Eclipse 2020-03 制作的,但我多年来一直在观察这种行为。
两个原因。 1) this
无法重新分配,并且 2) 您在构造函数中而不是普通方法中。
执行此操作的代码在 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
的标志,它对静态和最终叠加图像的显示进行硬编码。所以这些总是显示 this
。
至于为什么选择它,代码没有给出任何原因。
有人知道为什么在Eclipse 的内容帮助中this
关键字(Java) 被标记为static final
的原因吗? final
对我来说有意义,但为什么 static
?
屏幕截图是使用 Eclipse 2020-03 制作的,但我多年来一直在观察这种行为。
两个原因。 1) this
无法重新分配,并且 2) 您在构造函数中而不是普通方法中。
执行此操作的代码在 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
的标志,它对静态和最终叠加图像的显示进行硬编码。所以这些总是显示 this
。
至于为什么选择它,代码没有给出任何原因。