这些方法有没有理由属于java.lang.Object?
由于这些方法是在java.lang.Object中声明的,因此每个类都将继承它们 这意味着像String,ArrayList等类也会拥有它们。
是否与单一责任原则相矛盾?
重要通知:我不是在问:
- 为什么这些方法不属于Thread
- 为什么每个对象都可以被锁定
答案 0 :(得分:1)
方法被继承的事实并没有违反单一责任原则。如果可以覆盖这些方法,它可能会违反SRP。但他们不能,他们被宣布为final
。
在单一责任原则(SRP)的背景下,我们定义 责任是“改变的理由。”如果你能想到更多 改变一个班级的动机不止一个,那个班级就有更多 一个责任。
使用concurrent programming管理threads的责任落在拥有该实施的Object
类上。该责任与Object
或其任何子类型中定义的任何其他责任之间没有任何联系。如果您需要更改wait
的行为,您只需要更改Object
(可能还有任何通话网站),而不是String
,而不是List
,而不是别的什么。
你可能想要争辩说Object
类本身并不具有凝聚力并试图做太多:克隆,比较对象的相等性,生成String
表示等。然后可以争辩说这些东西都没有与另一个相关联,所以它不是问题。