From a6b56360c5fbf6dfb4c2bd3af25eb9800b8b1419 Mon Sep 17 00:00:00 2001 From: quanke <609319858@qq.com> Date: Sat, 7 May 2016 18:41:34 +0800 Subject: [PATCH] =?UTF-8?q?Update=2016.4=20=E6=94=B9=E8=BF=9B=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "16.4 \346\224\271\350\277\233\350\256\276\350\256\241.md" | 1 + 1 file changed, 1 insertion(+) diff --git "a/16.4 \346\224\271\350\277\233\350\256\276\350\256\241.md" "b/16.4 \346\224\271\350\277\233\350\256\276\350\256\241.md" index f3bca65..bd92cbc 100644 --- "a/16.4 \346\224\271\350\277\233\350\256\276\350\256\241.md" +++ "b/16.4 \346\224\271\350\277\233\350\256\276\350\256\241.md" @@ -421,4 +421,5 @@ public class RecycleAP { 所有Trash对象——以及ParseTrash及支撑类——现在都成为名为c16.trash的一个包的一部分,所以它们可以简单地导入。 无论打开包含了Trash描述信息的数据文件,还是对那个文件进行解析,所有涉及到的操作均已封装到static(静态)方法ParseTrash.fillBin()里。所以它现在已经不是我们设计过程中要注意的一个重点。在本章剩余的部分,大家经常都会看到无论添加的是什么类型的新类,ParseTrash.fillBin()都会持续工作,不会发生改变,这无疑是一种优良的设计方案。 + 提到对象的创建,这一方案确实已将新类型加入系统所需的变动严格地“本地化”了。但在使用RTTI的过程中,却存在着一个严重的问题,这里已明确地显露出来。程序表面上工作得很好,但却永远侦测到不能“硬纸板”(Cardboard)这种新的废品类型——即使列表里确实有一个硬纸板类型!之所以会出现这种情况,完全是由于使用了RTTI的缘故。RTTI只会查找那些我们告诉它查找的东西。RTTI在这里错误的用法是“系统中的每种类型”都进行了测试,而不是仅测试一种类型或者一个类型子集。正如大家以后会看到的那样,在测试每一种类型时可换用其他方式来运用多形性特征。但假如以这种形式过多地使用RTTI,而且又在自己的系统里添加了一种新类型,很容易就会忘记在程序里作出适当的改动,从而埋下以后难以发现的Bug。因此,在这种情况下避免使用RTTI是很有必要的,这并不仅仅是为了表面好看——也是为了产生更易维护的代码。 -- GitLab