注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 数据库 > Oracle 内容正文:Eclipse中的IAdaptable分析

Eclipse中的IAdaptable分析

发布时间:2006-07-20 07:54:31 来源:blog 网友评论 0 条
  Java是一种强类型语言,每个实例都必须有指定的类型。实际上,Java类型有两种声明类型和 运行时类型 (也可以相应的说是静态类型 和动态类型 ). 像Python这样的弱类型语言通常称为无类型,但是这样说并不严谨,因为每个实例都有它的运行时类型。你只是不用事先声明一个实例的类型而已。

  要想调用一个对象中的方法,这个方法需要在声明类型中存在。也就是说,你只能调用定义在父类中的方法,即使该实例是一个确定的子类型:

List list = new ArrayList();
list.add("data"); // 在这里没问题
list.ensureCapacity(4); // 这里就不行了ensureCapacity() 只在ArrayList中才有。

  如果我们要调用实际类型中的方法,我们首先要将它转为正确的类型。在本例中,我们可以把 ArrayList 转为List,因为ArrayList实现了List 接口. 也可以在运行时动态的检验,使用 list instanceof ArrayList.

  可扩展的接口

  糟糕的是,一个类不能总是实现你所需要实现的接口。可能是因为这只对少数几种情况才有效,或者它是一个没有被关联的库中的类型,或者这个接口在后期又被改变了。

  这种情况就可以使用IAdaptable。 你可以把 IAdaptable 动态的进行类型转化。使用如下方法避免直接的类型转化:

Object o = new ArrayList();
List list = (List)o;

  我们可以这样做:

IAdaptable adaptable = new ArrayList();
List list = (List)adaptable.getAdapter(java.util.List.class);

  你可认为它是一种类型动态转化; 我们把adaptable转为List实例。

  为什么不直接转化,而要用额外的getAdapter() 呢?这种机制可以使我们将目标类转化为没有实现的接口。例如, 我们可能想使用HashMap 作为一个 List, 尽管他们并不兼容。

IAdaptable adaptable = new HashMap();
List list = (List)adaptable.getAdapter(java.util.List.class);

  实现IAdaptable
 
  大多数IAdaptable的实现看起来就想是为支持类型构造多个if表达式的叠加。如果要为HashMap实现getAdapter() 可以这样:

public class HashMap implements IAdaptable {
 public Object getAdapter(Class clazz) {
  if (clazz == java.util.List.class) {
   List list = new ArrayList(this.size());
   list.addAll(this.values());
   return list;
  }
  return null;
 }
 // ...
}

  返回的是一个对自身的代理,而不是直接转化类型。如果请求的是不支持的类型,可以直接返回null表明失败,这样比抛出异常要好。

  PlatformObject

  当你想添加新的要扩展的类型时,只是简单的修改一下就可以了。在任何情况下,如果已经得到了类型,为什么不修改接口?不修改类(如果使用接口,不容易保证向后兼容)或者改变它的类型(HashMap不是 List,但是可以转化)是有原因的。要解决这个问题,在Eclipse中,使用了一个抽象类 PlatformObject。它为你实现了 IAdaptable接口,你就可以不用再操心了。

  PlatformObject 代理所有的它对getAdapter()的请求到 IAdapterManager. IAdapterManager是平台默认提供的,通过 Platform.getAdapterManager()来访问。你可以将它想象为一个巨大的 Map ,它负责关联类和适当的适配器。PlatformObject的 getAdapter() 方法可以访问到这个Map.
相关文章
  • 基于Eclipse RCP简化IoC实现
  • Eclipse RCP+Spring建胖客户端Web程序
  • 搭建Eclipse+MyEclipse开发环境
  • Eclipse插件之WebLogic Plugin 2.0.0
  • Eclipse 的历史、现状和未来
【评论】【收藏本文】【打印】【关闭】
上一篇文章:Eclipse RCP+Spring建胖客户端Web程序
下一篇文章:基于Eclipse RCP简化IoC实现
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
Atlas快速入门之实战Atlas
Atlas快速入门之实战Atlas
.net页面间的参数传递简单实例
.net页面间的参数传递简单实例
推荐阅讯
  • 为什么要用UML建模之建模原理
  • 用AJAX开发智能Web应用程序之高级篇
  • 用Ruby+Builder创建XML应用
  • 在Oracle的网络结构中解决连接问题
  • EMC与微软共推在微软应用环境中的ILM解决方
  • Weblogic Portal中实现AJAX编程之架构
  • EJB3 实体组件在 J2SE 中的使用
  • KODO访谈—走向开源的EJB 3.0持久性引擎
  • WEB2.0开发之AJAX:HTML++同Client/SOA
  • 开源世界遭遇尴尬 商业味日趋浓厚
阅读排行
  • 1..net页面间的参数传递简单实例
  • 2.VC++与Matlab混合编程之引擎操作详解
  • 3.Oracle数据库数据对象分析
  • 4.Eclipse3.2+Tomcat5.5.17+Oracle9配置
  • 5.Oracle数据库中索引的维护
  • 6.在Oracle的网络结构中解决连接问题
  • 7.Oracle数据安全面面观
  • 8.Oracle数据库的ORA-00257故障解决过程
  • 9.Oracle数据库备份与恢复的三种方法
  • 10.Oracle与SQL Server在企业应用中的比较
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载