`

如何彻底杜绝别人使用你的类

阅读更多

 今天在eclipse源码中发现了这个东东:

写道
transactionLock.new Access() {/*empty block*/}.transfer(owner);
[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一个包

1
0
分享到:
评论
4 楼 fuliang 2009-08-04  
yzj520hyy 写道
我觉得这段代码这样做并不是为了杜绝别人使用你的类,如果杜绝的话定义为final不就完了。
但如果写成final以后,这些类给别人去使用,如果别人发现不合适,就无法通过继承的方式来进行修正,而如果让别人继承,别人不使用相同包名的话会导致一些相关资源无法使用的问题,这样的问题在SWT里很多。
所以这些类可以被继承,但是要求与父类在同一包下。

使用final自己就不可以继承扩展它了。我说的是为了杜绝别人去使用它,但是自己在同一个包可以使用它,swt的大多数组件都是这么设计的,为了安全或者避免误用而不让你继承它。
当然你取了一个和它一样的包名可以继承它,这显然不是它所推荐的,它的意图是你不要继承它,而不是你所说的因为不能使用包内相关的资源而故意设计成让你必须使用这个包名才能去继承它的。事实上为了使用某个包内的资源而取其包名和它一致,这显然不是被推荐的方式,并且class code会有安全验证同一个包内的class签名不一致而无法运行。
3 楼 yzj520hyy 2009-08-03  
我觉得这段代码这样做并不是为了杜绝别人使用你的类,如果杜绝的话定义为final不就完了。
但如果写成final以后,这些类给别人去使用,如果别人发现不合适,就无法通过继承的方式来进行修正,而如果让别人继承,别人不使用相同包名的话会导致一些相关资源无法使用的问题,这样的问题在SWT里很多。
所以这些类可以被继承,但是要求与父类在同一包下。
2 楼 flyinglife 2008-07-31  
相当有学问
1 楼 fuliang 2008-05-26  
引用
在构造函数判断该子类的包是否和Access一个包

这个东东又叫做soft final

相关推荐

    《杜绝垃圾食品,关爱自身健康》主题班会.ppt

    首先,学生应彻底杜绝如方便面、麻辣条等垃圾食品,提倡健康饮水,不带饮料进校园;其次,避免在校内吃早点并乱扔垃圾,远离不卫生的油炸食品和街头烧烤;再者,实施捡拾垃圾的行动,保持校园清洁;最后,倡导学生...

    IP隐藏网神之网络隐形衣

    网神之网络隐形衣就是网络中的隐形衣。它能够在不改变任何硬件连接配置的情况下,将计算机在网络中隐藏起来,真正实现”隐于无形”...总之,网络隐形衣能够彻底杜绝您上网的后顾之忧,让您尽情享受网络冲浪带来的乐趣!

    数据装甲,保护你的数据安全

    *数据加密 对数据进行加密是数据安全保护的经典方式,KDSEC为您提供了全新的软件数据透明加密,杜绝文件丢失后产生的泄密风险。...如果你很重视自己的个人隐私数据安全,那使用这款专业的数据装甲

    游戏拦截专家2011

    游戏防沉迷专家同时也是一款专业的网瘾戒除软件,按照人体生物规律,采用多种独特技术从源头和习惯上彻底杜绝游戏,配合游戏拦截专家可以有效的控制、降低、直至戒除网瘾。 游戏防沉迷专家操作简单,您最少只要单击...

    网络病毒的防范的基本常识

    一般人都以为不要使用别人的磁盘,即可防毒,但是不要随便用别人的电脑也是非常重要的,否则有可能带一大堆病毒回家。  4、准备一份具有查毒、防毒、解毒及重要功能的软件,将有助于杜绝病毒。 5、使用新软件时,先...

    安徽工业大学计算机基础考试题库计算机病毒.pdf

    15. 防病毒措施:不使用盗版光盘、建立数据备份制度和备份重要系统参数是预防病毒的措施,而建立微机局域网并不直接防止病毒感染。 16. 防杀病毒软件目的:防杀病毒软件主要用于检查计算机是否感染病毒以及清除已知...

    枫音影院2006仿帝王_sp2

    十二、Helix Server服务器管理,可设定规定的时间内让影片自动更换路径,彻底杜绝盗链,方便查询与操作Helix Server的会员点播日志,使服务器资源有如铜墙铁壁,坚不可催。 十三、会员卡功能,后台生成点卡、包月...

    拓网长微博系统 v1.0.rar

    整站所有文章(标题、简介、内容)均采用图片形式输出,彻底杜绝文章盗链、采集及防止搜索引擎的抓取,让您的更加和谐! 拓网长微博系统特点: 1、用户无需注册,即可拥有所有前台功能; 2、支持自定义字体种类...

    消防安全常识与应急措施.docx

    2. **禁烟与烟具管理**:吸烟是引发火灾的重要因素,尤其是在宿舍内吸烟,要坚决杜绝这一行为。 3. **维护消防设施**:爱护和保持消防设施(如消防栓、灭火器)的完好,确保安全通道畅通无阻。 4. **火炉安全**:...

    计算机病毒试题PPT课件.pptx

    对于计算机病毒的检测和清除,使用查毒软件和杀毒软件是常见的方法,但最为彻底的手段可能是重新格式化磁盘,尽管这会导致磁盘上的所有数据丢失。值得注意的是,计算机病毒并非无法清除,只要有适当的工具和正确的...

    旅游景区RFID门票系统应用方案.pdf

    2. **彻底杜绝假票**:利用RFID技术的有效性,彻底消除因假票带来的经济损失。 3. **提高工作效率**:取消手工管理和统计,确保数据的及时准确,提高工作效率。 4. **防范财务漏洞**:杜绝财务统计漏洞,防止工作...

    机修工安全考试题答案钢琴曲谱.docx

    25. **四不伤害**:不伤害自己、不伤害他人、不被他人伤害、保护他人不被伤害,这是每个工人都应遵循的安全准则。 26. **三违**:违反劳动纪律、违章作业、违章指挥,是导致事故的重要原因,应坚决杜绝。 27. **...

    计算机应用基础二.pdf

    20. 病毒传播途径:使用不明来源的软件、借用他人的软盘或非法复制都可能导致病毒传播。 21. 计算机病毒特性:具有传染性、潜伏性和破坏性。 22. 字节和二进制位:一个字节由8个相邻的二进制位组成,是计算机中...

    网趣网上购物系统时尚版V13.0

    杜绝辛苦添加的数据轻易被别人复制!  四二、网站商品搜索关键词登记,方便查询哪些商品更容易吸引客户!  四三、导航条魔幻菜单功能,支持文字式和图片式自由选择效果!  四四、支持商品复制功能,可以快速添加或...

    网络安全手册.docx

    等可移动储存介质o 一般 人都以为不要使用别人的磁盘,即可防毒,但是不要随便用别人的电脑也是非常重要的, 否则有可能带一大堆病毒回家。 6、 使用新软件时,先用扫毒程序检査,可减少中毒机会。主动检査,可以过滤...

    网趣网上购物系统的部分特点与精华

    杜绝辛苦添加的数据轻易被别人复制!  四二、网站商品搜索关键词登记,方便查询哪些商品更容易吸引客户!  四三、导航条魔幻菜单功能,支持文字式和图片式自由选择效果!  四四、支持商品复制功能,可以快速添加或...

    驾驶证管理新规则及交通规章制度汇编.pdf

    这是为了彻底杜绝酒后驾车行为,降低因醉驾引发的严重交通事故。 3. **安全带使用**:驾驶员和乘客必须系好安全带。不系安全带的驾驶员将被记3分,罚款100元;副驾驶未系安全带则记1分,罚款50元。这是对乘客安全的...

    【精选】《安全管理》之钢桶爆炸的原因.doc

    尽管存在明显的安全风险,一些业主仍因经济利益驱动,抱有侥幸心理,忽视安全措施,甚至在他人提醒后仍继续使用。这种疏忽大意的行为极大地增加了爆炸发生的可能性,如杨某的案例所示,没有安全阀和压力表等基本防护...

Global site tag (gtag.js) - Google Analytics