Java中的最终类不应该是最终的,反之亦然?
我最近在一次采访中被问到这个问题:
你能说出Java API中任何不应该是最终的类,或者一个不是而且应该是的类吗?
我想不出任何东西。这个问题意味着我应该知道所有的API类,就像我的手背一样,我个人不希望任何Java开发人员知道。
如果有人知道任何此类课程,请提供示例。
我最近在一次采访中被问到这个问题:
你能说出Java API中任何不应该是最终的类,或者一个不是而且应该是的类吗?
我想不出任何东西。这个问题意味着我应该知道所有的API类,就像我的手背一样,我个人不希望任何Java开发人员知道。
如果有人知道任何此类课程,请提供示例。
java.awt.Dimension
不是最终的或不可变的,应该是。任何返回维度的东西(例如Window对象)都需要制作防御性副本,以防止调用方做令人讨厌的事情。
首先想到的例子是一些非最终的数字子类,例如BigDecimal
和BigInteger
,它们应该是最终的。
特别是,可以重写它们的所有方法。这使您能够创建一个 broken ,例如:BigDecimal
public class BrokenBigDecimal extends BigDecimal {
public BigDecimal add(BigDecimal augend) {
return BigDecimal.ZERO;
}
}
例如,如果您从不受信任的代码接收BigDecimal,则可能会产生重大问题。
解释一下 Effective Java: