java何时使用IAdaptable?
给定一个类型为A的对象,并希望在可能的情况下将其转换为类型B,何时适合使用以下各项
直接强制转换和/或
instanceof
检查if(a instanceof B) { B b = (B)a; // ... }
通过
IAdaptable.getAdapter
转换// assuming A implements/extends IAdaptable B b = (B)a.getAdapter(B.class); if(b != null) { // ... }
当
A
无法隐式转换为`IAdaptable时,通过IAdaptable
进行转换B b = (a instanceof IAdaptable ? (B)((IAdaptable)a).getAdapter(B.class) : a instanceof B ? (B)a : null); if(b != null) { // ... }
通过IAdapterManager进行转换
B b = (B)Platform.getAdapterManager().getAdapter(a, B.class); if(b != null) { // ... }
# 1 楼答案
这很难给出一般规则
当您从Eclipse项目视图中获得类似于当前选择的内容时,对象是一个用户界面,而不是底层对象(例如项目或文件)
instanceof
将不起作用从用户界面对象到基础对象的转换通常使用
IAdapterFactory
来完成,该IAdapterFactory
指定一个单独的工厂类来进行转换。在这种情况下,必须使用Platform.getAdapterManager().getAdapter
当一个对象实现
IAdaptable
时,您必须查看文档或源代码,看看它也支持哪些类我不认为案例3会发生
我经常使用此代码处理大多数事情:
注意:较新版本的Eclipse有一个
org.eclipse.core.runtime.Adapters
类,它有一个类似的adapt
方法