我有一个我无法解决的问题。 我正在学习昼夜平分点变换,我无法解决这个问题,在我的Activator中我把这段代码:
Properties properties = new Properties();
properties.put("equinox.transformerType", "xslt"); //$NON-NLS-1$ //$NON-NLS-2$
registration = context.registerService(URL.class.getName(), context.getBundle().getEntry("/transform.csv"), properties); //$NON-NLS-1$
但Eclipse告诉我,registerService方法不能与那些参数(String,Url,Properties)一起使用,它只接受(String,Url,Dictionary)。 Equinox_Transforms中的示例使用的方法与我使用的方法相同,但在这些情况下它可以正常工作。
有什么问题?
我使用以下方法更改了Activator中的示例代码:
Dictionary properties = new Hashtable();
properties.put("equinox.transformerType", "xslt");
registration = context.registerService(URL.class.getName(), context.getBundle().getEntry("/transform.csv"), properties);
是不是?
答案 0 :(得分:2)
您从Eclipse获得的编译错误,BundleContext类型中的registerService(String,Object,Dictionary)不适用于参数(String,URL,Properties)是正确的。 这是因为java中的泛型。 java.util.Properties 类扩展了Hashtable,它遵循通用规则。 现在,如果您看到BundleContext.reregisterService()
所期望的参数ServiceRegistration<?> registerService(String clazz, Object service, Dictionary<String, ?> properties);
明确提到它期望第三个参数为Dictionary&lt; .String,?&gt; 。
因此,当您使用简单的属性时,它无法在编译时为第3个参数识别类型。
所以,你的第二种方法是正确的:
Dictionary properties = new Hashtable();
properties.put("equinox.transformerType", "xslt");
registration = context.registerService(URL.class.getName(),
context.getBundle().getEntry("/transform.csv"), properties);
即使将字典引用更改为
,也可以进行检查Dictionary<Object,Object> properties = new Hashtable();
它将再次为您提供相同的编译时间错误。
您可以了解有关泛型here的更多信息。
您可以在Equinox Transform revealed上阅读有关Equinox Transform和示例示例的更多信息。
答案 1 :(得分:0)
当您使用Properties对象时,import语句是什么? 看起来您可能没有使用java.util.Properties(java.util.Dictionary的子类)。有很多名为Property的类。