java 代码
-
- public class WorkbenchLabelProvider extends LabelProvider implements
- IColorProvider, IFontProvider {
-
- ...
-
- public final String getText(Object element) {
-
- IWorkbenchAdapter adapter = getAdapter(element);
- if (adapter == null) {
- return "";
- }
- String label = adapter.getLabel(element);
-
-
- return decorateText(label, element);
- }
-
- protected IWorkbenchAdapter getAdapter(Object element) {
- if (!(element instanceof IAdaptable)) {
- 我觉得这一步实现不好[还好它是方法是保护的,竟味着我们可以在子类中重写它,见下面]。
- return null;
- }
- return (IWorkbenchAdapter) ((IAdaptable) element)
- .getAdapter(IWorkbenchAdapter.class);
- }
-
-
-
- ...
- }
下面看看 IWorkbenchAdapter, 其实不用看也应该想得到里面有啥(上面有调用过)
java 代码
-
- public interface IWorkbenchAdapter {
- public Object[] getChildren(Object o);
-
- public ImageDescriptor getImageDescriptor(Object object);
-
- public String getLabel(Object o);
-
- public Object getParent(Object o);
- }
WorkbenchLabelProvider 当然还有其他方法:getImage 等,与getText()类似
java 代码
-
- public class BaseWorkbenchContentProvider implements ITreeContentProvider {
- ...
- public Object[] getChildren(Object element) {
- IWorkbenchAdapter adapter = getAdapter(element);
- if (adapter != null) {
- return adapter.getChildren(element);
- }
- return new Object[0];
- }
-
- public Object[] getElements(Object element) {
- return getChildren(element);
- }
- ...
-
- }
上面注释是我不解的地方,
其实...
java 代码
- Platform.getAdapterManager(). registerAdapters(adapterFactory, ...);
-
-
- public interface IAdapterFactory {
-
- public Object getAdapter(Object adaptableObject, Class adapterType);
-
- public Class[] getAdapterList();
- }
通过上面。我们可以把“扩展”动态地“插入”
然后可以通过 IAdapterManager#getAdapter(Object adaptable, Class adapterType) 取得需要的东西。
又一个间接层,
这个机制是好的,具有扩展性,而又不具有浸入性。
可是 WorkbenchLabelProvider 和 BaseWorkbenchContentProvider的getAdapter()方法在发现 Model 没有实现IAdaptable的时,直接返回null,而不再问问 AdapterManager, 如果问一下,那么将会灵活得多(竟味着功能够动态地插入).
所以:
我写下如下代码:
java 代码
- public MyWorkbenchLabelProvider extends WorkbenchLabelProvider {
- protected IWorkbenchAdapter getAdapter(Object element) {
- IWorkbenchAdapter adapter = super.etAdapter(element);
- if (adapter == null) {
- adapter = (IWorkbenchAdapter ) Platform.getAdapterManager().getAdapter(element, IWorkbenchAdapter.class);
- }
- return adapter;
- }
- }
当然, BaseWorkbenchContentProvider也应该这样。
我觉得所有使用IAdaptable机制的,应该都要这样做.
而且 AdapterManager 似乎做得有点不够,看其代码:
java 代码
-
-
- public Object getAdapter(Object adaptable, Class adapterType) {
- IAdapterFactory factory = (IAdapterFactory) getFactories(adaptable.getClass()).get(adapterType.getName());
- Object result = null;
- if (factory != null)
- result = factory.getAdapter(adaptable, adapterType);
- if (result == null && adapterType.isInstance(adaptable))
- return adaptable;
- return result;
- }
最好的是。先看看这个类是否已经实现了 IAdaptable, 如果是,先问一下嘛,然后再去 Factory 里看看。
分享到:
相关推荐
2023年基金四季报摘录:百亿基金经理如何看市场焦点?
在"摘录:Ext Js 简单入门(淡入淡出、波纹效果)"这篇博文中,作者主要介绍了如何利用Ext Js实现两种常见的视觉效果:淡入淡出和波纹效果。下面将详细探讨这两个主题。 **淡入淡出效果** 在网页设计中,淡入淡出效果...
通过使用Cyclone,Haskell开发者能够享受到更加可靠的编程环境,同时提高代码的执行效率和可维护性。如果你是Haskell开发者,了解并尝试Cyclone Prelude将有助于提升你的开发实践,并可能开启新的编程视角。
在VB.NET编程中,有很多实用的技巧可以帮助我们提高效率并简化代码。以下是一些关键知识点,结合提供的代码片段进行详细解释: 1. **焦点切换计算**: 在这个例子中,`TextBox1_TextChanged`事件处理程序展示了...
其它代码释义摘录: 看是否是AT命令或者其响应 a. 如果是AT开头或者有A/且A/之后是回车换行,则表示ATE1 如果不是以上或者以以上字符串开头,回车换行之后以"+"开头,或者"OK"、"ERROR" 则表示是AT...
根据提供的内容和描述,这里是一份CSS语法手册的内容摘录。本手册包含了一系列的CSS属性及其用法,下面将详细解释这些知识点。 ### CSS属性详解 #### 1. font-family `font-family` 属性用于定义元素文本的字体...
这是一个还在讨论中的源代码,VB高手们有不同的意见,摘录: A:晕,这最终还是调用了老汉多线程……那和线程也没什么区别吧……你应该再试一试线程池…… B:不完全是,因为纤程要先ConvertThreadToFiber,...
代码管理: 摘录常见常用好用,自己测试过新技术的可用代码。 资料管理: 摘录未知的,难度高的,重要的,新生代的技术说明资料。 备 忘 录: 记录日常工作中碰到的日常事情。比如要解决的问题。 FAQ : 记录日常...
WEB模型Web服务的测试模型与代码摘录[1]软件测试测试WebServices的有效性、性能、可伸缩性、可靠性以及安全性时所面临的主要挑战是WebServices的分布性。为了使完整的WebServices能够实现预期的功能,就要求客户端和...
文章摘录: Ver: Git部署: Ver: 提要: 版本: 搜索数据生成: 版本: 搜索数据生成: 版本: 站点地图: 版本: JSON内容数据: 版本: Restful API: 版本: PullRequests进行中,补丁存在。 外部链接...
webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录质
通过以上分析可以看出,《编程之道》、《代码大全》以及《人月神话》这三部经典著作为软件开发者提供了宝贵的经验和指导原则。无论是个人技能的提升还是团队协作的优化,这些原则都能够帮助开发者更好地应对软件开发...
摘录之星的特点包括: 摘录,一步到位:按下一个热键(Ctrl+S,可重新定义)就自动完成内容的命名、保存、归并目录等诸多事项,并且自动记忆其它重要参考信息,如页面网址、摘录时间、应用程序名等。 摘录,一键通:...
背景:写一个简单的聊天系统,发出Htpp的Url实现跳转... 摘录: URL地址自动添加的实现 URL地址自动添加的实现其实就是那么点内容:检测与替换。 检测 “检测”就是检测文字(字符串)内部是否有符合http地址的内容,显
内容索引:VB源码,其它类别,服务 VB编写的枚举Windows系统服务的例子,压缩包内包括两个例子,一个是枚举本地计算机的服务,另一个则是枚举网络内指定计算的服务,并对枚举到服务进行分类索引,部分代码摘录: ...
可自定义的atom软件包,用于使用webhooks轻松地将嵌入消息中的代码摘录发送给Discord。 最初由KyStolos制造。 注意:此软件包需要安装Discord.js,hastebin-gen和Node。 首先,请确保已安装Node(如果在终端中键入...
理解何时和如何抛出异常,以及如何有效地捕获和处理异常,对于编写健壮的代码至关重要。 20章:STL(标准模板库)与算法 STL是C++标准库的一部分,包含容器(如vector、list、set)、迭代器、算法和函数对象等组件...
我已经致力于通过Eclipse IDE实施的几个计算机科学项目(代码摘录)。 I)第一个项目PK(PARKEI的缩写)是一种使用面向对象编程原理设计的游乐园系统。 这是我的计算机编程实验室课程中的一个单独项目。 它包括...
源代码摘录,该项目用于向学生进行计算机的生物识别分发。 用Java开发的项目(Spring,Hibernate,Mysql,Spring MVC,thymeleaf,Bootstrap等)。 此摘录显示了对学生名单的咨询,以及一名新学生的加入。
这款源代码的核心是构建一个高效、用户友好的电子书阅读环境,支持多种格式的电子书籍,并具备了书签、摘录以及屏幕取词等高级特性。 1. **Android工程结构**:此项目是一个标准的Android Studio工程,包含多个模块...