克隆方法和可克隆接口在编译时如何相互链接?

时间:2012-05-22 07:29:05

标签: java oop late-binding

如果实现接口编译器,则要求您提供这些方法的实现。但是在调用重写的clone()方法的情况下,编译器如何知道类声明中没有提到特定接口(在本例中为Cloneable)。编译器如何将此映射告诉用户CloneNotSupported?它与后期绑定有关吗?

我认为JVM有关于方法区域中每个类的信息,比如它正在扩展的类以及它正在实现的接口。所以调用clone()方法将检查那些存储的有关该类的元数据,并发现Cloneable不在该接口列表中?这是否接近正确答案?

1 个答案:

答案 0 :(得分:3)

你明白了。基本上,Object.clone()方法执行以下操作:

if (!(this instanceof Cloneable)) {
    throw new CloneNotSupportedException(); 
}

The javadoc解释道:

  

首先,如果此对象的类未实现该接口   Cloneable,然后抛出CloneNotSupportedException。

请注意,编译器与此无关。这一切都发生在运行时。