Активатор равноденствий - PullRequest
0 голосов
/ 24 января 2012

У меня есть проблема, которую я не могу решить.Я изучаю преобразования равноденствия и не могу решить эту проблему, в свой активатор я поместил этот фрагмент кода:

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 используется тот же метод, который я использую, но в этих случаях он работает.

В чем проблема?

Я изменяю код примера в моем Активаторе сэто:

Dictionary properties = new Hashtable();
properties.put("equinox.transformerType", "xslt");
registration = context.registerService(URL.class.getName(), context.getBundle().getEntry("/transform.csv"), properties);

Это правильно?

Ответы [ 2 ]

2 голосов
/ 08 сентября 2014

Ошибка компиляции, которую вы получаете из Eclipse, что registerService (String, Object, Dictionary) в типе BundleContext не применима для аргументов (String, URL, Properties), является правильной. Это из-за общего в Java. java.util.Properties Класс расширяет Hashtable, который следует универсальному правилу. Теперь, если вы видите аргументы, ожидаемые BundleContext.reregisterService ()

ServiceRegistration<?> registerService(String clazz, Object service, Dictionary<String, ?> properties);

Ясно сказано, что он ожидает третий аргумент в качестве словаря <.String,?>.

Поэтому, когда вы используете простые свойства, он не может определить тип во время компиляции для этого третьего аргумента.

Итак, ваш второй подход верен:

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();

Это снова даст вам то же время компиляции Ошибка .

Вы можете получить больше информации о дженериках здесь .

Подробнее о преобразовании равноденствия можно прочитать на примере . Показано преобразование равноденствия .

0 голосов
/ 24 января 2012

Когда вы использовали объект Properties, что было оператором import?Похоже, вы не используете java.util.Properties (подкласс java.util.Dictionary).Есть немало классов под названием Property.

...