Eclipse报告数组的clone()方法是从它的相应类型(包括原语)?

时间:2015-07-17 06:18:51

标签: java arrays eclipse clone

enter image description here

我假设当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”

2 个答案:

答案 0 :(得分:3)

这只能通过查看eclipse源代码来解答。

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

细节:

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

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

CompletionTests表明clone-method的提议对象和字节数组的长度字段将具有declaringTypeSignature“[B”。

现在CompletionProposalLabelProvider获取这些提案对象并以StyledString的形式构建视图。方法#createLabelWithTypeAndDeclaration为字段提案,方法提案的方法#createMethodProposalLabel执行此操作。它们具有用于显示声明类型的不同实现。

方法显示调用SignatureUtil.stripSignatureToFQN,将“[B”作为签名传递。返回的结果已经删除了所有数组信息,只是“字节”。

字段显示调用Signature.getSignatureSimpleName传递“[B”。此方法不会忽略数组信息并返回“byte []”。

答案 1 :(得分:-1)

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

clone()方法实际上是&#39;对象&#39;超类。其他类应该覆盖它并实现自己的安全克隆实现。如果没有提供任何内容,则调用并实现Object类的正常克隆。

这就是为什么克隆数组取决于数组所保存的数据类型以及将调用该数据类型的clone方法。如果你有一个int [],将调用clone for int。如果你有A级,并且&#39; a&#39;是A类的对象,你有一个&#39; a&#39;对象(a []),将调用来自A类的克隆。

希望能回答你的问题。