您可以使用插件片段,因为Greg已经获得。一个片段可以有一个platform filter,当当前平台不符合过滤器表达式时,该片段将阻止其加载。
为32位WINDWS的平台过滤器应该是这样的:
Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))
片段还必须指定主机捆绑。在运行时,片段资源合并到宿主束
Fragment-Host: the.parent.bundle
的类空间,以避免编译错误,你会在你的主机捆绑的接口或抽象类,并适用于Windows不同的实现两个片段和Linux。
Windows实现可以安全地访问hwnd
字段,并且Linux实现可以返回一个值,指示缩放不可用/修复。
例如,主机束将具有ScaleProvider
:
class abstract ScaleProvider {
ScaleProvider getInstance() {
String className = ScaleProvider.class + "Impl";
try {
Class<?> implClass = ScaleProvider.class.getClassLoader().loadClass(className);
return (ScaleProvider)implClass.newInstance();
} catch(ClassNotFoundException | InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
abstract float getScale(Gc gc);
}
为简洁起见,实施装载机和接口描述是在一种类型。 getInstance()
代码预计名为ScaleProviderImpl
的类将出现在同一个包中。
的ScaleProviderImpl
类由匹配当前平台和将具有类
class ScaleProviderImpl extends ScaleProvider {
float getScale(Gc gc) {
// platform-specific implementation
}
}
本示例假定总有一个匹配的平台特定片段存在于片段中。但是,如果没有找到ScaleProviderImpl
,您当然可以更改getInstance()
代码以返回默认实现。
这是一个Eclipse RCP应用程序(它具有这种机制)或只是一个SWT应用程序? –
补充说明,这是一个eclipse rcp应用程序。什么机制?我环顾了一下,但找不到任何东西。 – dutt
您可以将“插件片段”与平台过滤器一起使用,以便仅在所选平台上使用它。 –