Java平台库中的异常

有时我会查看 Java平台库以获取灵感.那里有很多很好的设计解决方案,例如 this question.然而,也存在不应该模仿的异常现象.其中一些在Joshua Bloch的Effective Java,Second Edition一书中给出,例如java.io.ObjectStreamConstants等常量接口或java.net.URL中equals方法的行为.您知道Java平台库中此类异常的其他示例吗?请尽可能多地给予.

解决方法

close()方法声明抛出IOException,可能没有理智的实现抛出.如果抛出,则编写一个正确处理的finally块是非常不可能的.

java.util.Enumeration和java.util.Iterator本质上是一回事.

应弃用java.util.Vector,java.util.Hashtable和java.util.Dictionary.

Object.clone()和Cloneable接口非常糟糕,并且存在很多问题.

javax.swing.table.DefaultTableModel是邪恶的.

java.io.Serializable使用可选的私有readObject()和writeObject()方法定义了一个奇怪的特殊约定.

永远不要使用java.util.Observable.

finalize()方法是异常的,应该尽可能避免.

所有日期/时间API的设计都非常糟糕. java.util.Date结束时几乎所有的方法都被弃用了. java.util.Calendar有一个可怕的get(int)和set(int,int)方法,它采用一个标识字段的整数,而不是正确定义的getter和setter. java.sql.Date和java.sql.Timestamp以尽可能最糟糕的方式扩展java.util.Date:文档明确告诉它扩展但不应被视为IS-A关系(这非常糟糕,因为扩展目的是定义IS-A关系).此外,java.sql.Date覆盖形式java.util.Date的一些方法抛出异常破坏超类合同并失败Liskov替换原则(作者可能没有太在意,因为他们不想要IS-A关系) .

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...