【问题标题】:Not able to see clone() method in suggestion list in java?在 java 的建议列表中看不到 clone() 方法?
【发布时间】:2015-12-27 21:50:55
【问题描述】:

当我打开Object class 源代码时,我可以看到其中的clone() 方法。

当我尝试查看方法列表中的clone() 方法时,没有出现 (如果我将MyClassobject 创建为myClass 并应用. dot operator,它会给我关于eclipse IDE 中所有可用方法的建议,但它不会在该列表中显示clone() 方法!!)

MyClass myClass = new MyClass(); myClass. // here I expect to see clone() as well but not

为什么会这样????

【问题讨论】:

  • 默认情况下,cloneprotected。您必须有目的地覆盖它并将其访问级别更改为public
  • 在其他自定义类中我可以看到受保护的方法.....但是我们看不到 Java 核心类是吗???
  • @JordiCastilla 不完全是。
  • 只是好奇为什么它只对 Java 核心类不可见......虽然我们可以看到自定义类! ...这样做背后的想法是什么

标签: java clone cloneable


【解决方案1】:

如果您考虑official Oracle Java documentation for Object class,您会发现clone() 方法是受保护的,由于多态性,该方法将只能在同一个包或子类中,而不能在其外部。

因此,该方法可以only在包java.langonly在这个类的所有孩子,但不能在已声明儿童的包裹。尝试阅读 this topic 以提高您对 Java 访问修饰符的理解

但是这里有一个粗点:你可以像这样覆盖这个方法

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

之后你可以在声明你的类MyClass的同一个包中使用方法clone,但要准备好得到CloneNotSupportedException

您还可以使用自己的实现。只需实现Clonable 接口并提供您自己的clone 方法即可。

另外,如果你计划克隆的对象必须相等,你也应该重写 equals 方法。

祝你好运!

【讨论】:

  • Protected 在包之外也可以看到 Child ......并且 Object 是每个用户创建的类的父类......所以在想为什么会发生为什么他们不这样做也显示克隆方法。
  • 尝试阅读this
【解决方案2】:

也许您尝试克隆的对象的创建者将克隆方法设为私有。此外,您可能不应该依赖 Eclipse 自动完成功能,尤其是在您刚开始使用 Java 时。

【讨论】:

  • 我认为这是最好的.....最好不要在其中打破头脑.. eclipse 创建者的选择不显示受保护的方法作为建议:)
【解决方案3】:

java.lang.Cloneable接口必须由类实现

MyClass 实现 Cloneable。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2017-09-08
    相关资源
    最近更新 更多