-
我在 Python 类里直接写了个空列表当属性、想让每个对象都有自己独立的一份,结果给一个对象的列表追加元素、所有对象的列表里竟然都冒出了同一个元素,我对着代码看了半天都不敢相信,最后才搞懂那个列表根本不属于任何一个对象而是被全体实例共用的同一个的深度复盘
我写了个表示用户的类,想给每个用户一个标签列表,图省事直接在类体里写了 tags = [],以为这样每 new 一个对象它就有一个属于自己的空列表。然后给某个用户 append 一个标签,准备只给他打标。可诡异的事发生了:我只给 user_a 加了一个标签,打印 user_b、user_c 的 tags 里面竟然也有那个标签。我以为写错了引用、反复检查 append 的对象确实只动了 user_a…- 0
- 0
-
一个重写了 equals 却忘了重写 hashCode 的 Java 对象,放进 HashSet 后既去不了重、也再也取不出来:一次违背 equals-hashCode 契约的深度复盘
给 User 重写了 equals(id 相同即相等),放进 HashSet 却没去重、用 id 相同的 User 去 map.get 竟返回 null——东西放进去了却取不出来。根因是只重写了 equals、没重写 hashCode:两个 equals 相等的对象,hashCode 却用 Object 默认实现(基于地址)而不同,违背了'equals 相等则 hashCode 必相等&…- 0
- 0
-
SOLID 原则完全指南:从五个字母到工程肌肉记忆
SOLID 是面向对象设计的五大原则,Robert C. Martin 提出。每个字母代表一个原则,合起来教你写"容易扩展、易于维护、不容易出 bug"的代码。这篇文章用具体代码示例讲透 SOLID,把"纸上原则"变成"工程肌肉记忆"。 S - 单一职责原则(Single Responsibility) "一个类只应该有一个引起…- 0
- 0
面向对象
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



