Eclipse 报告数组 clone() 方法来自其相应的类型(包括原语)?

Eclipse reporting an array's clone() method is from it's corresponding type (including primitives)?

我假设当 eclipse 建议方法时,它的形式是

 <methodName>(<any parameters>) : <retunType> - <actual class the method will be invoked from>

而且张贴图片中的所有方法(但 clone() 除外)似乎也是如此。

但对于 clone(),eclipse 表示该方法来自数组的类型(在本例中为 byte)。

所有原始类型数组引用类型数组都一样。

例如:对于 String[] 它给出 clone() : String[] - String

这是什么意思?我的理解错了吗?或者 clone() 方法中是否还有其他内容?

为了清楚起见,我的问题是 为什么 eclipse 说“clone()”来自 byte 而它应该来自 byte[],就像“length”

这是因为克隆取决于对象的类型。这取决于对象或原始数据类型的内存大小。

clone()方法其实就是'Object'superclass的方法。其他 classes 应该覆盖它并实现自己的安全克隆实现。如果什么都不提供,则调用并执行对象 class 的正常克隆。

这就是为什么,克隆数组取决于数组保存的数据类型以及将调用该数据类型的克隆方法。如果你有一个 int[],将调用 clone for int。如果你有 Class A,并且 'a' 是 class A 的对象,并且你有 'a' 对象数组 (a[]),从 class 会叫A。

希望这能回答您的问题。

这个只能看eclipse源码才能回答

您的问题的答案很简单但令人失望:生成完整提案的 Eclipse UI 代码构建了错误的显示。请注意,数组长度 属性 的完整建议显示了正确的类型(在您的示例中为 byte[])。

详情:

当您触发完成助手时,可能的完成计算为 CompletionProposals

CompletionProposals 的 属性 用于显示建议方法或字段完成的类型是 declaringTypeSignature(见下文)。

CompletionTests 表明克隆方法的提案对象和字节数组的长度字段将具有 declaringTypeSignature "[B".

现在 CompletionProposalLabelProvider 获取这些提案对象并以 StyledString 的形式构建视图。方法 #createLabelWithTypeAndDeclaration 用于领域提案,方法 #createMethodProposalLabel 用于方法提案。他们对声明类型的显示有不同的实现。

方法显示调用 SignatureUtil.stripSignatureToFQN,传递“[B”作为签名。返回的结果去掉了所有的数组信息,就是"byte".

字段显示调用Signature.getSignatureSimpleName传递“[B”。该方法不忽略数组信息和returns "byte[]".