Ошибка компиляции, которую вы получаете из 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();
Это снова даст вам то же время компиляции Ошибка .
Вы можете получить больше информации о дженериках здесь .
Подробнее о преобразовании равноденствия можно прочитать на примере . Показано преобразование равноденствия .