захватить # XXX в сообщении об ошибке (Generics Java) - PullRequest
2 голосов
/ 31 октября 2011

мои извинения за глупый вопрос;просто не могу найти правильный термин для поиска.Пытаясь скомпилировать сторонние исходники, я столкнулся со следующей ошибкой компиляции:

/Users/alf/Work/concise.svn/ExtendedSet/src/it/uniroma3/mat/extendedset/transactions/PairSet.java:[230,28] inconvertible types
found   : java.util.Collection<capture#741 of ? extends it.uniroma3.mat.extendedset.transactions.Pair<XT,XI>>
required: it.uniroma3.mat.extendedset.transactions.PairSet<XT,XI>

Я думаю, я знаю, в чем проблема, но что означает capture#741?Каждый раз, когда я пытаюсь перекомпилировать, число после # меняется - не уверен, поможет ли это каким-либо образом.

Обновление:

Код, о котором идет речь, был

public static <XT, XI> PairSet<XT, XI> newPairSet(Collection<? extends Pair<XT, XI>> ps, boolean compressed) {
    if (ps instanceof PairSet)
        return (PairSet<XT, XI>) ps;

и исправление, предложенное в ошибка javac: необратимые типы с обобщениями? работает просто отлично, но что означает capture#741?

1 Ответ

1 голос
/ 08 марта 2012

Захват # xxx является заполнителем для аргумента универсального типа ?, если вы используете PairSet<?,?>.Я думаю, что вы пытаетесь привести к параметру типа, который несовместим с фактическим параметром типа.

Если вы не знаете фактический аргумент типа, вы можете привести к PairSet и привести к XT или XI позже.

...