2014-11-16 1 views
1

Я пытаюсь написать метод для запуска JDOM2 XPath. Я хотел бы иметь возможность передавать в любом типе фильтра (например, Filter<Content> или Filter<Element>. Я передаю в элементе. Элемент представляет собой интерфейс, который расширяет Content фильтра. Компилятор предупреждаетНевозможно отличить из XPathExpression <Object> в XPathExpression <Content>

«Метод executeXPath(Document, String, String, Filter<Content>) в тип XMLUtilities не применим для аргументов (Document, String, String, Filter<Element>) «

Есть ли способ сделать это без необходимости создания отдельного метода для каждого из типов содержимого?

Filter<Element> filter = new org.jdom2.filter.ElementFilter(); 
List<Element> xPathSearchedNodes = XMLUtilities.executeXPath(doc, "/x:root","http://www.example.com",filter); 

....

static public List<Content> executeXPath(Document document, String xpathStr, String namespace, Filter<Content> filter) {...} 

ответ

3

Вы можете сделать свой метод родовое:

static public <T extends Content> List<T> executeXPath(Document document, String xpathStr, String namespace, Filter<T> filter) {...} 

Если передать его Filter<Content> он возвращает List<Content>, если передать его Filter<Element> его 'll return a List<Element> и т. д.

+0

Мне пришлось использовать «» для c ompiler, чтобы не жаловаться, затем в клиенте перечислите его в список . – user994165

Смежные вопросы