繁体   English   中英

java“泛型通用类型”

[英]java “generic generic type”

在我的申请中,我有一个董事会。 董事会由单元组成。 每个单元格都有一个int值。 扩展董事会的董事会类型很少。 每种类型的董事会将代表不同的单元。 例如,一个将使用列表,另一个将使用树。

所以这是尝试的方法:

public abstract class Board<T> {
    T<Cell> cells;  //error - The type T is not generic; it cannot be parameterized with arguments <Cell>

    protected abstract void setValues(T<Integer> values);
}

不幸的是,我不能使T为泛型类型。 我该如何实施?

我发现您的方法太复杂了。 Peter.petrov接近我要做的事情。

如果您需要列表和树(TreeSet),则两者都实现接口Collection,所以为什么不使用它呢? 除了添加,删除,迭代之外,您是否还需要其他任何工作?

集合(Javadoc)

这样您就可以上课了(我添加了一点Java8功能)

public abstract class Board {
    Collection<Cell> cells;  

    // Don't need to be abstract
    protected void setValues(Collection<Integer> values) {
        Stream<Cell> transformed = values.stream().map(Cell::new);
        cells.addAll(transformed.collect(Collectors.toList()));
    }
}

class Cell {
    private Integer value;

    Cell(Integer value) {
        this.value = value;
    }
}

如果需要(出于某些原因,请扩展此类并实现/重写将具有特殊行为的方法)。 希望我能提供帮助,但我确实看不到您的示例的用例。

我真的没有在这里使用泛型的必要。

public abstract class Board {
    Holder<Cell> cells;   

    protected abstract void setValues(Integer[] values);
}

现在有了您的列表和树实现/扩展持有人。
您可以有两个类ListHolder和TreeHolder都持有
单元格,但一个由列表支持,另一个由树支持。

实际上,将setValues设置为a更有意义
ListHolder和TreeHolder都实现的Holder上的方法。

您将需要具有以下内容:

public abstract class Board<T extends OtherGenericClass<TT>, TT> {
    T cells;
    public Board(T cells) {
        this.cells = cells;
    }
    protected abstract void setValues(T<Integer> values);

    public static void main(String[] args) {
        Cell<Integer> cells = new Cell<Integer>();
        Board<Cell<Integer>,Integer> board = new Board<Cell<Integer>,Integer>(cells);
    }
}

尽管这似乎并不像您想要的...我想您宁愿这样:

public abstract class Board<T> {
    Cell<T>[] cells;
    public Board(Cell<T>[] cells) {
        this.cells = cells;
    }
}

Cell类:

public abstract class Cell<T> {
    T cellValue;
    public Cell(T cellValue) {
        return cellValue;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM