`

核心运行时-IAdaptable

 
阅读更多

以属性视图为例。

eclipse核心运行时组件提供了eclipse类型扩展机制。我们以属性视图显示属性的工作方式来展示。

 

显示属性动作涉及两个参与者:property视图和被选中的对象。property视图需要通过接口知道被选中对象的属性,被选中的对象则要提供这个接口。property视图要求的接口是IPropertySource

一、最直接的方法是让被选中的对象实现IPropertySource接口。但存在以下几个问题:

给类添加大量这样接口,显得臃肿;“某个类实现了某项服务”应该是一个实现的细节,我们不希望暴漏出去;最重要的是我们的对象不应该知道property视图的存在。实现模型与UI的解耦合。

二、我们通过某种机制,这种机制能使得我们给一个类添加服务接口,但有不在该类本身的接口上暴漏出来。而且能给现有的类添加行为(方法),同时还不给类添加状态(字段)。最关键的是如何描述、识别这个扩展。

基于上两点,采用eclipse中的IAdaptable扩展支持。该接口只有一个方法,使用者可以通过此方法动态的查询一个对象是否支持某个特定的接口。

eclipse中使用IAdaptable接口的方式有两种:一种是修改现有类的getAdapter()方法,这种方式显而易见直接有if判断参数返回一个adapter就可;另一种是不修改现有方法,getAdapter()通过工厂来实现(从外部扩展现有类的接口)

下面就来看看如何实现第二种方式:

在程序启动的XXXPluginstart()方法中,我们写下

IAdapterManager manager = Platform.getAdapterManager();

propAdapterFactory = new PropAdapterFactory();

manager.registerAdapters(propAdapterFactory, MyObject.class);

……

其中MyObject就是我们要显示其属性的对象类型。propAdapterFactory是产生该对象属性adapter的工厂。我们让这个工厂实现IAdapterFactory接口。在工厂的getAdapterList()注册接口类型(如:return new Class[]{IPropertySource.class …}.getAdapter()中返回的对象需要实现IPropertySource接口。

现在工厂有了,我们怎么能适配器工厂参与到getAdapter()调用中呢?我们修改对象类型MyObject中的getAdapter()方法,方法体如return Platform.getAdapterManager().getAdapter(this,adapter);

另外:在eclipse开发过程中,曾使用以下语句与属性视图交互过。

// 与属性视图交互

 PropertySheet ps = (PropertySheet)getViewSite(). getActiveWorkbenchPage().findView(IPageLayout.ID_PROP_SHEET);

if (null != ps)

{

  ps.selectionChanged(MyView.this, new StructuredSelection(myObject)); }

当然这个myObject的类有一个myObjectFactory来产生MyObjectAdapter的对象。为了在属性视图中显示的属性按一定的顺序排列,在MyView中的getAdapter()中还要加上:

if (adapter == IPropertySheetPage.class)

{

      returnnew MyObjectPropertySheetPage();

 }

在类的creatControl()方法体中加setSorter(new PropertySheetSorter());

如果不加,属性将按照a-z的方式排列。

分享到:
评论

相关推荐

    IJavaProject、IJavaElement、IAdaptable的作用域

    在Eclipse的世界里,理解"IJavaProject"、"IJavaElement"和"IAdaptable"这三个核心接口至关重要,因为它们是构建Eclipse插件和进行代码操作的基础。本文将深入探讨这三个接口的作用域及其在实际开发中的应用。 首先...

    Eclipse-Adapters

    当我们调用`macintosh.getAdapter(IOrange.class)`时,系统会尝试找到一个将`IApple`转换为`IOrange`的适配器。如果没有找到这样的适配器,`getAdapter`方法将返回`null`。 #### 五、应用场景 Eclipse Adapters的...

    eclipse 属性视图开发

    当用户选择了某个文件或文件夹时,属性页会自动更新以显示该对象的相关属性。这种响应机制是由当前激活的Part中的`ISelectionProvider`接口实现的。每个Part都有一个类似于`PartSite`的组件,可以通过将实现`...

    基于适配器模式的RCP应用属性视图实现

    首先,我们要理解适配器模式的核心思想。适配器模式通过创建一个适配器类,将旧的或不兼容的接口转换成我们期望的新接口,从而使原本无法协同工作的组件得以协同工作。在Eclipse RCP中,适配器模式常用于连接不同...

    C语言程序设计之(一)手机通讯录管理系统

    C语言程序设计之(一)手机通讯录管理系统

    清华大学2023级物理学专业本科培养方案

    清华大学2023级物理学专业本科培养方案

    docbook5-style-xsl-extensions-1.78.1-4.el7.x64-86.rpm.tar.gz

    1、文件内容:docbook5-style-xsl-extensions-1.78.1-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/docbook5-style-xsl-extensions-1.78.1-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    Python网络爬虫开发指南.docx

    网络爬虫简介, 介绍了网络爬虫, 并讲解了爬取网站的方法。 数据抓取,展示了如何从网 页中抽取数据。 下载缓存, 学习了如何通过缓存结果避免重复下载的问题。 并发下载, 通过并行下载加速数据抓 取。 动态内容, 展示了如何从动态网 站中抽取数据。 表单交互, 展示了如何与 表单进行交互, 从而访问你需要的数据。 验证码处理, 阐述了如何访问被验证码图像保护的数据。 Scrapy, 学习了如何使用流行的高级框架 Scrapy。

    2025最新电力安全工作规程考试题及答案.doc

    2025最新电力安全工作规程考试题及答案.doc

    2025最新手术室考试题及答案.doc

    2025最新手术室考试题及答案.doc

    environment-modules-3.2.10-10.el7.x64-86.rpm.tar.gz

    1、文件内容:environment-modules-3.2.10-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/environment-modules-3.2.10-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    2025医疗三基三严知识试题题库(附答案).docx

    2025医疗三基三严知识试题题库(附答案).docx

    用于计算点云周围的凸包的算法Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    通过线性规划在不同风险度下的最优投资组合的MATLAB代码

    通过线性规划在不同风险度下的最优投资组合的MATLAB仿真代码。MATLAB代码通过线性规划(linprog)模拟不同风险度下的最优投资组合。代码初始化风险度 a,并逐步增加至0.05。在每个风险度下,定义目标函数、约束条件和等式约束,调用linprog求解最优投资比例,计算收益并绘制风险度与收益的关系图。该模型展示了如何在风险与收益间权衡,为投资决策提供参考。

    科学计算器程序QZQ.zip

    科学计算器程序QZQ

    该程序将深度图与其彩色图像对齐,用于基于图像的渲染应用程序Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    farstream-0.1.2-8.el7.x64-86.rpm.tar.gz

    1、文件内容:farstream-0.1.2-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/farstream-0.1.2-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    fence-agents-rhevm-4.2.1-41.el7-9.6.x64-86.rpm.tar.gz

    1、文件内容:fence-agents-rhevm-4.2.1-41.el7_9.6.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/fence-agents-rhevm-4.2.1-41.el7_9.6.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    城市交通和车辆行为数据集

    关于数据集 城市交通和车辆行为数据集是与城市交通和车辆行为相关的各种因素的数据集合。以下是数据集中每列的描述: 1. 城市:收集数据的城市名称。 2. 车辆类型:交通中涉及的车辆类型(例如汽车、卡车、公共汽车、摩托车)。 3. 天气:数据收集时的主要天气状况(例如晴天、下雨、下雪)。 4. 经济状况:城市普遍的经济状况(例如,繁荣、衰退、稳定)。 5. 星期几:收集数据的星期几(例如星期一、星期二等)。 6. 一天中的小时:收集数据的时间,通常以 24 小时格式表示。 7. 速度:交通中车辆的速度,以英里每小时 (mph) 或公里每小时 (km/h) 为单位。 8. 是否是高峰时段:二进制指示符(0 或 1),指示是否在高峰时段收集数据。 9. 发生随机事件:二进制指示符(0 或1),指示在数据收集期间是否发生任何随机事件(例如事故、道路封闭)。 10. 能源消耗:车辆的能源消耗,通常以燃料消耗或用电量来衡量。 该数据集可用于多种目的,例如分析交通模式、研究天气和经济条件对交通的影响、评估能源消耗趋势以及预测交通拥堵。研究人员和交通规划者可能会发现该数据集对于理解和改善城市交通非常

    《基于multisim的AD590运算放大器电路、比例放大电路、AD590传感器》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、说明、论文、数据集一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持

Global site tag (gtag.js) - Google Analytics