【问题标题】:JDK7 generics not compilingJDK7泛型未编译
【发布时间】:2015-01-06 17:53:07
【问题描述】:

以下代码在 jdk6 中编译,但在 jdk7 中不编译。请提出任何解决方法

public interface LocalCacheMap<K extends Comparable<? super K>, V>  
extends ClearableCache<K>, Iterable<V>{
    V get(K key);
}

public class Universe<K extends Comparable<? super K>, V, TSKEY extends Comparable<? super TSKEY>> extends MasterLocalCache<K>  
implements Iterable<V>, LocalCacheMap<K, V>, TsDaoInfo<TSKEY, K>, ValueConverter<K, Object, V>{
    public V get(K key) {
        return get(key, keyFunct);
    }
    abstract public TSKEY buildTsKey(K key, Date date);

    abstract public K getObjKey(TSKEY tsKey);

    abstract public Date getDateKey(TSKEY tsKey);

}

public class JdbcTimesSeriesCacheDef<K extends Comparable<? super K>, TSKEY extends Comparable<? super TSKEY>, LC extends Universe<K,?,TSKEY>&DataSourceProvider, T> extends AbstractRawTimeSeriesCacheDef<K, T, LC> {
    private final SqlDefs<T> defs;

}

使用 jdk7 编译时出现以下错误

JdbcTimesSeriesCacheDef 错误:Universe 中的 get(K#1) 无法在 LocalCacheMap 中实现 get(K#2)

【问题讨论】:

  • 拥有我们也可以编译的东西肯定很好......
  • 依赖类很多,提供所有这些类又困难又麻烦。
  • 所以...把他们排除在外。获取一个最小的工作示例。如果您不提供可编译的内容,我们将看不到与您相同的编译失败。

标签: java generics compiler-errors java-7


【解决方案1】:

改变

LC extends Universe<K,?,TSKEY>&DataSourceProvider,

LC extends Universe<K,T,TSKEY>&DataSourceProvider,

【讨论】:

  • 我不能使用 T.. 因为它不是合适的类型。类 Universe,V,TSKEY。它必须是值类型'V'
  • What is there now (?) 意味着 JdbcTimeSeriesCacheDef 不在乎它是什么类型。你能用 Object 代替吗?
【解决方案2】:

我通过使用特定的值类型“V”代替“?”解决了这个问题

public class JdbcTimesSeriesCacheDef, V, TSKEY extends Comparable, LC extends Universe&DataSourceProvider, T> extends AbstractRawTimeSeriesCacheDef { private final SqlDefs defs;

}

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多