Java多级泛型类转换



我有一个转换失败:

(Map<String, ? extends ISeries<Date, Double, ISeriesPoint<Date, Double>>>) inputSeries

我得到错误:

incompatible types: java.util.Map<java.lang.String,com.quantcomponents.marketdata.IOHLCTimeSeries> 
cannot be converted to java.util.Map<java.lang.String,? extends 
com.quantcomponents.core.model.ISeries<java.util.Date,java.lang.Double,
com.quantcomponents.core.model.ISeriesPoint<java.util.Date,java.lang.Double>>>

inputSeries定义为:

Map<String, IOHLCTimeSeries> inputSeries = createInputSeriesFromStockDatabases(inputStockDatabases);

createInputSeriesFromStockDatabases返回一个Map<String, IOHLCTimeSeries>

以下是接口定义:

public interface ISeries<A extends Comparable<A>, O extends Comparable<O>, P extends ISeriesPoint<A, O>> extends Iterable<P>, IPersistentIdentifiable { ... }
public interface ITimeSeries<P extends ISeriesPoint<Date, Double>> extends ISeries<Date, Double, P>     { ... }
public interface IOHLCTimeSeries extends ITimeSeries<IOHLCPoint>, IStockDataCollection {...}

虽然我找不到错误,但转换似乎遵循了接口泛型。有人能发现吗?

感谢

问题是它在Map内部。

更容易看到List发生了什么,因为它只需要一个类型参数。StringObject的子类,因此String可以被转换为Object。您可能认为这意味着List<String>可以转换为List<Object>,但它不能:类型系统无法"看到"外部类型内部。

同样的事情也发生了。仅仅因为T可以被转换为V并不意味着Map<String,T>可以被转换成Map<String,V>

(这非常烦人:例如,这意味着你不能将ArrayList<ArrayList<T>>视为List<List<T>>。)

最新更新