如果您使用的是Java 1.5或更高版本,则可以获取所需的行为并通过以下方式删除强制转换:
public interface Modifiable<T extends Modifiable<T>> extends Cloneable { T clone();}public class Foo implements Modifiable<Foo> { public Foo clone() { //this is required return null; //todo: real work }}由于Foo扩展了Object,所以它仍然满足Object类的原始协定。由于Modifiable接口施加了额外的约束,因此无法正确优化clone()方法的代码将无法编译。另外,调用代码不必强制转换clone方法的结果。



