【问题标题】:capture#XXX in error message (Java Generics)在错误消息中捕获#XXX(Java 泛型)
【发布时间】:2011-10-31 17:35:33
【问题描述】:

对于一个愚蠢的问题,我深表歉意;只是想不出一个合适的词来搜索。尝试编译第三方源码,遇到如下编译错误:

/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 error: inconvertible types with generics? 中建议的修复工作正常,但capture#741 是什么意思?

【问题讨论】:

  • 如果您使用 PairSet&lt;?,?&gt;,则 capture#xxx 是 ? 的占位符。我认为您尝试强制转换为与实际类型参数不兼容的类型参数。
  • @Stephan -- 你能把它作为答案而不是评论发布吗?那么也许 alf 可以接受它,这个问题就会从未回答的列表中消失。
  • @Stephan - 已确认,很乐意接受。

标签: java generics compiler-errors


【解决方案1】:

如果您使用 PairSet&lt;?,?&gt;,则 capture#xxx 是泛型类型参数 ? 的占位符。我认为您尝试强制转换为与实际类型参数不兼容的类型参数。

如果您不知道实际的类型参数,您可以转换为 PairSet 并稍后转换为 XT 或 XI。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多