为什么Eclipse会将方法的参数名称生成为arg0、arg1、arg2等?

31
当我尝试访问某个类的方法时,Eclipse 能够找到该方法,但是该方法中的参数被替换为 arg0、arg1、arg2...。
例如:
假设我有一个名为 ReadFile.java 的类中有这个方法。
@Override
public int readXXX(int start, int end, String xxx) throws IOException {
    return 0;
}

当我尝试从类的实例中访问该方法时,它会显示如下:

readFile.readXXX(arg0, arg1, arg2);

在传递参数时,很难确定应该传递什么。Java方法也存在相同的问题。即当我实现一个接口时,所有在该接口下的方法都会被生成,但是这些方法中的参数名称都是 arg0、arg1 等等。

有没有任何设置可以避免这种情况?

我正在使用 Eclipse Galileo。


请确保您的库源代码可用并已在项目设置中配置。 - Sebastian Zarnekow
@Sebastian:是的,它们已配置好。 - Harry Joy
10
如果有人因相同问题而尝试使用标准Java API进行修复,请在Java > 编辑器 > 内容辅助 > 高级选项中的首选项中增加“从已附加Javadoc中获取参数名称的超时时间(毫秒):”。在我使用的Indigo版本的OS X上,这种方法有效。 - okonomichiyaki
@spacemanaki 此外,如果您的运行时环境设置为 JRE 而非 JDK,则标准 Java API 也可能会引起此问题。在前者的情况下,Eclipse 将花费时间解析在线 Javadocs 而不是读取 JDK。 - Duncan Jones
@spacemanaki 您的评论应该显示为答案。我在使用javaFx 2.0时遇到了自动完成的问题,您的评论解决了我的问题。每个人都在谈论附加源,而大多数情况下对我来说是“获取超时”。 - C.LS
6个回答

18

Eclipse无法处理参数,因为它找不到源代码或Java文档附件。

请确保已经附加了源代码。

检查方法调用readXXX,并按下F3键,打开方法声明。如果源代码未被附加,Eclipse会显示"未找到源代码",并允许您"附加源代码..."。


2
如果能解释如何附加Javadocs,这个答案会更好。我认为,解决这个问题的更常见方法是附加文档而不是源代码。 - Duncan Jones

4

如果你遇到了相同的问题,尝试执行 Project > Clean 操作,这将删除旧的类文件,并使Eclipse在调试模式下重新编译它们。在我的Indigo 3.7.2版本中有效。


3
问题在于你的类文件缺乏嵌入的调试信息。在构建项目的AST时,JDT不会重新解析依赖项的源文件或javadoc,因此即使您能够打开类并清楚地看到方法名称,它也不知道参数名。
为了纠正这个问题,您需要使用启用调试信息重新编译类文件,这将使类文件变得更大,但除非您正在开发内存限制的设备,否则应该没有问题。

1
我通过进入偏好设置
Java / Content Assist
在“排序和过滤”下取消勾选“隐藏不可见的建议”,现在自动完成中不再显示(arg0, arg1, arg2)等,而是显示(catalog, schemaPattern, tableNamePattern...)。
我使用运行在Eclipse Mars 4.5.1平台上的Spring Tools Suite 3.7.2。

1

对于像我这样尝试应用同事建议但不幸失败的人,请尝试在 Window -> Preferences -> Java + Compiler 中检查选项 "Add variable attributes to generated class files (used by the debugger)"。

完成后,请再次尝试构建项目。

干杯。


有点晚看到了 :( - Esteban

0

这个链接帮助我解决了这个问题。

1)右键单击您的android.jar文件,然后选择属性。

enter image description here

2) 选择Java源代码附件。输入源代码目录位置(也可以使用“外部文件夹...”浏览到目录)并单击“应用”。

enter image description here

以下是代码名称与版本号的对应关系,同时提供了API级别和NDK版本以方便使用:

enter image description here


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