预言机文档中的坏例子



我读了这篇Oracle关于Java接口的文章。我认为,提供的示例很糟糕。他们使用以下示例:

public interface Relatable {
public int isLargerThan(Relatable other);
}
public class RectanglePlus implements Relatable {
public int isLargerThan(Relatable other) {
RectanglePlus otherRect = (RectanglePlus) other;
if (this.getArea() < otherRect.getArea()) {
return -1;
}
else if (this.getArea() > otherRect.getArea()) {
return 1;
}
else {
return 0;    
}           
}

是否可以将Relatable other投给RectanglePlus?我认为不是。在我的理解中,如果通过接口引用使用此类,并且有人会尝试将其与Relatable的另一个实现进行比较,则此类实现将失败,这实际上不是RectanglePlus的实例。我认为,这种接口的使用是有效的,而问题出在实现上。

你觉得怎么样?可能是我不明白什么?

你是对的。如果isLargerThanRelatable不是RectanglePlus(或其任何子项)的实例,则此代码可能会引发强制转换异常

他们应该检查使用instanceof传递的对象的类。

相关内容

  • 没有找到相关文章

最新更新