在这个平台上,关于对象类的clone()方法有很多问题。每个人的回答都不一样。关于clone()为什么要受到保护,有很多问题。有人说..
>
为什么object.clone()没有身体部分。
受保护的本机对象clone()抛出CloneNotSupportedException;
如果上面的第二点是正确的,那么我们如何直接访问子类中的clone()。
它是正确的。
像这样:
public class Foo implements Cloneable {
public Foo copy() {
return super.clone(); // or just `clone()`
}
}
关键是类的方法可以调用其超类中的protected
方法。请注意,如果要在java.lang.object
中启用clone()
的默认实现,foo
需要实现cloneable
。但你不必启用它,即使启用了也不必使用它;见下文。
它们是不能(成功地)调用clone()
的对象。确切的含义取决于上下文:
>
可能是没有public
的对象克隆方法,而您不能调用protected
方法。
可能是(非公开的)克隆方法不起作用;例如,因为类不实现可克隆的
或扩展可克隆的类。
>
使clone()
可访问其他无法访问它的类。即不在同一个包中且不扩展该类的任何类。
要更改clone()
方法的行为:
super.clone()
。您可以任意实现克隆行为。super.clone()
.您注意到本机
修饰符了吗?本机方法没有正文。
java.lang.object
的克隆行为是在本机代码中实现的。它正在做普通Java代码无法做的事情。(或者使用Java反射。)
问题内容: 定义为的受保护的具体原因是什么? 问题答案: 克隆受到保护的事实非常令人怀疑-事实是该clone方法未在Cloneable接口中声明。 它使该方法对于获取数据副本非常无用,因为你不能说: 我认为,Cloneable现在的设计在很大程度上被认为是一个错误(以下引用)。我通常希望能够实现接口的实现,Cloneable但不一定要实现接口Cloneable(类似于的使用Serializable
我试图理解object.clone()在Java中是如何工作的。我偶然发现了以下事实: null 疑点: 为什么Java设计者会做出这样的设计选择并这样实现它?为什么不在本身中定义,如果实现类不为提供实现,那么将产生编译时错误。 Q2.为什么要在运行时检查实例是否实现? 附:我知道在一个问题中问多个问题是一个坏主意。但这些都是密切相关的问题。我可以问一个问题,比如“为什么不包含?”但是,我觉得,为
问题内容: 这确实是一个好奇心,而不是一个问题。 为什么类没有方法?现在看来似乎应该当你认为它有一个事实,,等方法。 我知道您可以执行以下操作: 但是为什么没有方法呢? 问题答案: 原因是Scanner类旨在读取以空格分隔的令牌。这是包装基础输入流的便捷类。在扫描仪之前,您所能做的只是读取单个字节,如果要读取单词或行,这将是一个很大的麻烦。使用Scanner,您可以传入System.in,它会执行
Java中的本质上是不可靠的。具体地说,我对接口的最大问题是,它需要一个不定义方法本身的方法行为。因此,如果遍历一个列表,您必须使用反射来访问它定义的行为。然而,在Java8中,我们现在有了默认方法,现在我问为什么在中没有默认的方法。 我理解为什么接口不能默认对象方法,但是,这是一个明确的设计决定,所以可以做出例外。 我有点想弃用并将其内部代码更改为类似以下内容: 然后继续使用使作为中的默认方法的
问题内容: Iterables提供了两种方法 但只有一个 是否存在任何破坏对称性的设计/实现原因? 问题答案: 我认为要点是,没有理由可以使用来完成此操作。Guava尽力使API保持较小,因此没有添加可以/应该以其他方式轻松完成的事情。 另一方面,还没有一种机制可以测试iterable是否为空,如果是,则返回默认值而不是第一个值。因此,。 同样,没有简单的方法来获取最后一个元素,因此和
问题内容: 虽然有一种方法没有。这是为什么?文件在完成后会自动关闭吗? 谢谢! 问题答案: 该类的javadoc将类描述为: 文件和目录路径名的抽象表示。 只是路径名的一种表示形式,有一些关于文件系统(如)和目录处理的方法,但是实际的流输入和输出在其他地方完成。流可以打开和关闭,文件不能。 (我个人的看法是,不幸的是Sun后来继续创建,给命名不一致带来了很大的困惑。)