通用类型作为泛型类型参数

时间:2016-03-15 13:39:48

标签: java generics

我想知道我是否可以通过避免课堂宣言中的第二个V来提高课程水平。不知何故,它看起来很糟糕。

public abstract class TreeElementAction<T extends TreeNode<V>, V> {

    protected abstract boolean actFor(@Nullable T element);

    public void forEachElementInTree(@Nonnull T rootNode) {
        requireNonNull(rootNode);
        actFor(rootNode);

        Collection<T> children = (Collection<T>) rootNode.getChildren();
        for (T treeNode : children) {
            forEachElementInTree(treeNode);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

除非您在此类的任何具体实现中需要V,否则您可以删除类型变量,如@PeterLawrey建议的那样,并将其替换为TreeNode<V>中的无界通配符:< / p>

public abstract class TreeElementAction<T extends TreeNode<?>> {