我陷入以下情况。我得到了一个名为Fusion的抽象类,该类应该具有一个称为ClusteringObjects的TreeSet(这也是一个抽象类)。因此我将类型设置为
public abstract class Fusion {
protected TreeSet<? extends ClusteringObject> metadata;
//CODE
}
在Fusion的子类(称为TemporalFusion)中,我想将TemporalClusteringObjects(ClusteringObject的子类)添加到TreeSet中,但这不起作用。
public class TemporalFusion extends Fusion {
public TemporalFusion(Model metadataModel, String fusionId) {
//CODE ...
metadata = new TreeSet<TemporalClusteringObject>(new TimestampComparator());
}
public void add(int metadataIndex, ParsedMetadata singleMetadata) {
//create temporalClusteringObject (works fine)
metadata.add(temporalClusteringObject);
}
}
添加会导致以下故障:
The method add(capture#2-of ? extends ClusteringObject) in the type TreeSet<capture#2- of ? extends ClusteringObject> is not applicable for the arguments (TemporalClusteringObject)
是否有一个通用的解决方案,其中不是Fusion的每个子类都必须实现自己的元数据TreeSet以及由ClusteringObject继承的其自己的条目类型?
最佳答案
元数据成员应使用具体的泛型。只需将其设置为ClusteringObject或为Fusion声明一个通用类。
例:public abstract class Fusion<T extends ClusteringObject> { protected TreeSet<T> metadata;
...
然后像这样声明派生类:
public class TemporalFusion extends Fusion<TemporalClusteringObject> {
那应该可以了。