Java 泛型中的“&”和“”有什么区别?

2022-08-31 09:38:51

在阅读有关泛型的Java官方教程时,我发现您可以限制类型参数(在本例中为)以使用“and”运算符()扩展类和/或更多接口,如下所示:T&

<T extends MyClass & Serializable>

我用替换了(错误地并且仍然有效,并带有轻微的警告)。&,

我的问题是,这两者之间有什么区别吗:

<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma

和示例方法:

static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
    ArrayList<T> arr = new ArrayList<T>();

    for (T o : a) {
        arr.add(o); // Correct
    }
    return arr;
}

答案 1
<T extends MyClass & Serializable>

这断言单一类型参数必须扩展并且必须是 。TMyClassSerializable

<T extends MyClass , Serializable>

声明了个类型参数,一个调用(必须扩展),另一个调用(隐藏 - 这可能就是警告的内容)。TMyClassSerializablejava.io.Serializable


答案 2

推荐