如何使这两个java泛型方法在同一个类中声明

时间:2017-02-19 16:29:15

标签: java generics methods

我想声明两种方法。其中一个应该打印List,另一个应该打印List>。所以我宣布了以下代码,但它们有问题。有没有人可以帮我解决这个问题。

/* print the List<List<String>> */
public static <T> void print(List<List<T>> set) {
    if (set == null) return;
    for (List<T> subSet : set) {
        System.out.print("[");
        for (int i = 0; i < subSet.size() - 1; i++) {
            System.out.print(subSet.get(i) + ", ");
        }
        if (subSet.size() >= 1) {
            System.out.print(subSet.get(subSet.size() - 1));
        }
        System.out.println("]");
    }
}

 /* print the List<String> */
public static <T> void print(List<T> set) {
    if (set == null) return;
    int size = set.size();
    System.out.print("[");
    for (int i = 0; i < size - 1; i++) {
        System.out.print(set.get(i) + ", ");
    }
    System.out.println(set.get(set.size() - 1) + "]");
}

1 个答案:

答案 0 :(得分:1)

如果第二种方法实际上是第一种类型,如果编译器不知道该类型具有嵌套列表,则存在这种风险。

我会把它们结合起来

public static <T> void print(Collection<T> set) {
    if (set == null) {
       System.out.print("null");
       return;
    }
    System.out.print("[ ");
    String sep = "";
    for (T t : set) {
        System.out.print(sep);
        sep = ", ";
        if (t instanceof Collection) {
            print((Collection) t);
        } else {
            System.out.print(t);
        }
    }
    System.out.print(" ]");
}

public static <T> void println(Collection<T> set) {
    print(set);
    System.out.println();
}