Java 多泛型:最佳公共超类

Java 多泛型:最佳公共超类,java,generics,Java,Generics,我正在构建一个ListUtil列表合并实现。其思想是向方法提供两个任意列表,并为其返回一个使用最接近的初始列表类型的公共超类类型的列表。这在java中甚至是可能的吗?下面应该可以做到这一点: private static <T> List<T> getSuper(List<? extends T> one, List<? extends T> two) { List<T> ts = new ArrayList<>(o

我正在构建一个ListUtil列表合并实现。其思想是向方法提供两个任意列表,并为其返回一个使用最接近的初始列表类型的公共超类类型的列表。这在java中甚至是可能的吗?

下面应该可以做到这一点:

private static <T> List<T> getSuper(List<? extends T> one, List<? extends T> two) {
    List<T> ts = new ArrayList<>(one);
    ts.addAll(two);
    return ts;
}

private static List getSuper(List除非您有充分的理由这么做,否则我建议两种选择:

  • 返回您想要的任何类型的列表(
    ArrayList
    可能是合理的默认候选列表),但不向用户显示:

    static <T> List<T> merge(List<T> list1, List<T> list2)
    

    为什么返回一个通用的
    列表不起作用?你想得到什么好处?我想这个想法是,如果一个和两个是LinkedList,那么一个LinkedList就会被返回。但这并不完全清楚。这比我想象的要简单得多!谢谢!@assylias-hmm,我甚至没有想到这一点。我不确定这到底是怎么回事清空以回答问题。它返回一个列表,但甚至不尝试匹配列表的类型inputted@phflack因为你误解了这个问题;)列表本身不是通用的,OP问的是列表的通用内容。
    
    static <T> List<T> merge(List<T> list1, List<T> list2)
    
    static <T, L extends List<T>> L merge(List<T> list1, List<T> list2, Supplier<L> listSupplier)
    
    merge(list1, list2, LinkedList::new);