gpt4 book ai didi

java - 泛型:Treeset 添加子类

转载 作者:行者123 更新时间:2023-12-02 06:06:58 24 4
gpt4 key购买 nike

我陷入了以下情况。我有一个名为 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> {

那么它应该可以工作。

关于java - 泛型:Treeset 添加子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com