- 浏览: 1653400 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
今天在eclipse源码中发现了这个东东:
写道
transactionLock.new Access() {/*empty block*/}.transfer(owner);
[org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl 814行]transactionLock是Lock类的一个实例
[org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl 814行]transactionLock是Lock类的一个实例
第一眼看上去相当诡异,用了很多的语法特性(内部类在外部实例化的方法,内部类的使用,抽象类等),顺便跟了进去,发现作者的真正用意:
让我们先看看Lock的代码吧:
代码大体如下:
class Lock{ public abstract class Access { /** * Initializes me. */ protected Access() { checkSubclass(); } /** * Transfers the lock's ownership to the specified thread. * * @param thread the new owner thread */ public void transfer(Thread thread) { Lock.this. transfer(thread); } private void checkSubclass() { String name = getClass().getName(); String packageName = name.substring(0, name.lastIndexOf('.') + 1); if (!"org.eclipse.emf.transaction.impl.".equals(packageName)) { //$NON-NLS-1$ throw new IllegalArgumentException("Illegal subclass"); //$NON-NLS-1$ } } } //other methods,properties,inner class code }
我们可以看到这个类里面的内部类Access是抽象类,但是没有抽象方法,这就相当诡异了。这个abstract有什么用呢?
通过abstract之后其他人就不可以直接实例化这个类了。当然可以通过private类或者构造函数来达到这个效果
,但自己在别的地方就用不了这个类了。另外我们可以看到在构造函数中调用了checkSubclass方法,我们发现在这个包里检查子类的包名是不是org.eclipse.emf.transaction.impl,否则就抛出异常,从而限制只有这个包的类才能子类化
这个类了。这样彻底杜绝了别人使用这个类的可能了:
1、把类定义成抽象的,杜绝别人直接实例化
2、在构造函数判断该子类的包是否和Access一个包
评论
4 楼
fuliang
2009-08-04
yzj520hyy 写道
我觉得这段代码这样做并不是为了杜绝别人使用你的类,如果杜绝的话定义为final不就完了。
但如果写成final以后,这些类给别人去使用,如果别人发现不合适,就无法通过继承的方式来进行修正,而如果让别人继承,别人不使用相同包名的话会导致一些相关资源无法使用的问题,这样的问题在SWT里很多。
所以这些类可以被继承,但是要求与父类在同一包下。
但如果写成final以后,这些类给别人去使用,如果别人发现不合适,就无法通过继承的方式来进行修正,而如果让别人继承,别人不使用相同包名的话会导致一些相关资源无法使用的问题,这样的问题在SWT里很多。
所以这些类可以被继承,但是要求与父类在同一包下。
使用final自己就不可以继承扩展它了。我说的是为了杜绝别人去使用它,但是自己在同一个包可以使用它,swt的大多数组件都是这么设计的,为了安全或者避免误用而不让你继承它。
当然你取了一个和它一样的包名可以继承它,这显然不是它所推荐的,它的意图是你不要继承它,而不是你所说的因为不能使用包内相关的资源而故意设计成让你必须使用这个包名才能去继承它的。事实上为了使用某个包内的资源而取其包名和它一致,这显然不是被推荐的方式,并且class code会有安全验证同一个包内的class签名不一致而无法运行。
3 楼
yzj520hyy
2009-08-03
我觉得这段代码这样做并不是为了杜绝别人使用你的类,如果杜绝的话定义为final不就完了。
但如果写成final以后,这些类给别人去使用,如果别人发现不合适,就无法通过继承的方式来进行修正,而如果让别人继承,别人不使用相同包名的话会导致一些相关资源无法使用的问题,这样的问题在SWT里很多。
所以这些类可以被继承,但是要求与父类在同一包下。
但如果写成final以后,这些类给别人去使用,如果别人发现不合适,就无法通过继承的方式来进行修正,而如果让别人继承,别人不使用相同包名的话会导致一些相关资源无法使用的问题,这样的问题在SWT里很多。
所以这些类可以被继承,但是要求与父类在同一包下。
2 楼
flyinglife
2008-07-31
相当有学问
1 楼
fuliang
2008-05-26
引用
在构造函数判断该子类的包是否和Access一个包
这个东东又叫做soft final
发表评论
-
Builder模式遇到继承
2013-10-13 13:48 0interface Self<T extends ... -
Builder模式遇到集成
2013-10-13 13:47 0package com.qunar.qss.business. ... -
JVM调优Step by Step
2012-02-02 17:38 0现代的JVM能够适应于各种应用和领域,每个应用和领域的使用 ... -
commons-lang StringUtils#split的坑
2011-12-31 10:11 3151今天用StringUtils#split,陷入了前两个坑。需求 ... -
使用scala.sys.process包和系统交互
2011-07-19 00:00 6489在Java中我们可以使用Runtime.getRuntime( ... -
HttpClient Json请求工具
2011-05-05 18:32 17847发送Json请求,结果返回Json. public sta ... -
利用Java反射实现通用的Excel报表
2011-04-12 16:00 2016最近有很多客户报表需要提供客户下载,需要生成一个Excel的格 ... -
深入异常处理
2011-03-31 20:46 1798异常处理是写一个健壮 ... -
Java序列化注意一些点
2011-03-12 21:04 18431.序列化ID的问题: 标示了版本号,版本号一致才能反序列化成 ... -
Java动态代理
2010-09-24 00:34 4457Java提供了动态代理,可以完成AOP和装饰模式的功能,主要的 ... -
Java Timestamp是和ExtJS的timestamp不兼容
2010-08-09 20:33 3351Timestamp纳秒级别的,ExtJS的timestamp使 ... -
XML DocumentBuilder#parse(String str)
2010-07-06 15:55 3884DocumentBuilderFactory dbf = ... -
[备忘]String#split/substring的子串会共享原来大的String
2010-03-29 17:18 1488如果每次需要大字符串中的很小的一个字串,可能会引起内存中大量的 ... -
runtime.exec()执行进程block死锁问题
2010-01-18 21:39 5284最近在java代码中使用runtime.exec执行rsync ... -
URL中文问题
2010-01-08 14:46 10522最近使用HttpClient,和Java的java.net.U ... -
A TaskExecutor Impl
2009-12-07 11:33 1624import java.util.ArrayList; im ... -
使用XStream把Java对象XML/JSON格式的序列化和反序列化
2009-05-05 11:37 6235试了一下Thoughtworks的XStream,以测试驱动和 ... -
从《编程的未来》这篇文章想到C++和Java语言的爽与不爽
2009-05-01 23:44 3966从编程的未来这篇文 ... -
《Effetive Java》读书笔记二
2009-02-23 14:23 1601第二章 所有对象共有的 ... -
《Effetive Java》读书笔记一
2009-02-19 11:36 2180《Effetive Java》和 《Effective C++ ...
相关推荐
首先,学生应彻底杜绝如方便面、麻辣条等垃圾食品,提倡健康饮水,不带饮料进校园;其次,避免在校内吃早点并乱扔垃圾,远离不卫生的油炸食品和街头烧烤;再者,实施捡拾垃圾的行动,保持校园清洁;最后,倡导学生...
网神之网络隐形衣就是网络中的隐形衣。它能够在不改变任何硬件连接配置的情况下,将计算机在网络中隐藏起来,真正实现”隐于无形”...总之,网络隐形衣能够彻底杜绝您上网的后顾之忧,让您尽情享受网络冲浪带来的乐趣!
*数据加密 对数据进行加密是数据安全保护的经典方式,KDSEC为您提供了全新的软件数据透明加密,杜绝文件丢失后产生的泄密风险。...如果你很重视自己的个人隐私数据安全,那使用这款专业的数据装甲
游戏防沉迷专家同时也是一款专业的网瘾戒除软件,按照人体生物规律,采用多种独特技术从源头和习惯上彻底杜绝游戏,配合游戏拦截专家可以有效的控制、降低、直至戒除网瘾。 游戏防沉迷专家操作简单,您最少只要单击...
一般人都以为不要使用别人的磁盘,即可防毒,但是不要随便用别人的电脑也是非常重要的,否则有可能带一大堆病毒回家。 4、准备一份具有查毒、防毒、解毒及重要功能的软件,将有助于杜绝病毒。 5、使用新软件时,先...
15. 防病毒措施:不使用盗版光盘、建立数据备份制度和备份重要系统参数是预防病毒的措施,而建立微机局域网并不直接防止病毒感染。 16. 防杀病毒软件目的:防杀病毒软件主要用于检查计算机是否感染病毒以及清除已知...
十二、Helix Server服务器管理,可设定规定的时间内让影片自动更换路径,彻底杜绝盗链,方便查询与操作Helix Server的会员点播日志,使服务器资源有如铜墙铁壁,坚不可催。 十三、会员卡功能,后台生成点卡、包月...
整站所有文章(标题、简介、内容)均采用图片形式输出,彻底杜绝文章盗链、采集及防止搜索引擎的抓取,让您的更加和谐! 拓网长微博系统特点: 1、用户无需注册,即可拥有所有前台功能; 2、支持自定义字体种类...
2. **禁烟与烟具管理**:吸烟是引发火灾的重要因素,尤其是在宿舍内吸烟,要坚决杜绝这一行为。 3. **维护消防设施**:爱护和保持消防设施(如消防栓、灭火器)的完好,确保安全通道畅通无阻。 4. **火炉安全**:...
对于计算机病毒的检测和清除,使用查毒软件和杀毒软件是常见的方法,但最为彻底的手段可能是重新格式化磁盘,尽管这会导致磁盘上的所有数据丢失。值得注意的是,计算机病毒并非无法清除,只要有适当的工具和正确的...
2. **彻底杜绝假票**:利用RFID技术的有效性,彻底消除因假票带来的经济损失。 3. **提高工作效率**:取消手工管理和统计,确保数据的及时准确,提高工作效率。 4. **防范财务漏洞**:杜绝财务统计漏洞,防止工作...
25. **四不伤害**:不伤害自己、不伤害他人、不被他人伤害、保护他人不被伤害,这是每个工人都应遵循的安全准则。 26. **三违**:违反劳动纪律、违章作业、违章指挥,是导致事故的重要原因,应坚决杜绝。 27. **...
20. 病毒传播途径:使用不明来源的软件、借用他人的软盘或非法复制都可能导致病毒传播。 21. 计算机病毒特性:具有传染性、潜伏性和破坏性。 22. 字节和二进制位:一个字节由8个相邻的二进制位组成,是计算机中...
杜绝辛苦添加的数据轻易被别人复制! 四二、网站商品搜索关键词登记,方便查询哪些商品更容易吸引客户! 四三、导航条魔幻菜单功能,支持文字式和图片式自由选择效果! 四四、支持商品复制功能,可以快速添加或...
等可移动储存介质o 一般 人都以为不要使用别人的磁盘,即可防毒,但是不要随便用别人的电脑也是非常重要的, 否则有可能带一大堆病毒回家。 6、 使用新软件时,先用扫毒程序检査,可减少中毒机会。主动检査,可以过滤...
杜绝辛苦添加的数据轻易被别人复制! 四二、网站商品搜索关键词登记,方便查询哪些商品更容易吸引客户! 四三、导航条魔幻菜单功能,支持文字式和图片式自由选择效果! 四四、支持商品复制功能,可以快速添加或...
这是为了彻底杜绝酒后驾车行为,降低因醉驾引发的严重交通事故。 3. **安全带使用**:驾驶员和乘客必须系好安全带。不系安全带的驾驶员将被记3分,罚款100元;副驾驶未系安全带则记1分,罚款50元。这是对乘客安全的...
尽管存在明显的安全风险,一些业主仍因经济利益驱动,抱有侥幸心理,忽视安全措施,甚至在他人提醒后仍继续使用。这种疏忽大意的行为极大地增加了爆炸发生的可能性,如杨某的案例所示,没有安全阀和压力表等基本防护...