【问题标题】:What is the difference between '&' and ',' in Java generics?Java泛型中的'&'和','有什么区别?
【发布时间】:2013-08-22 13:32:17
【问题描述】:

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

<T extends MyClass & Serializable>

我用, 替换了&amp;(错误地仍然有效,但有一个小警告)。

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

<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;
}

【问题讨论】:

  • @Doorknob 您假设 OP 正在使用键盘并且与您使用的键盘相同。
  • @emory 我认为即使这也是错误的方向 - 错误不在他的手指上,而是在他的大脑中。类似于您尝试在 Java 源文件中使用“包含”而不是“导入”。您输入了错误的“包含”,因为您的大脑告诉您输入错误的内容,这可能有多种原因。
  • @Nicholas Pickering,是对的!对我来说,这不是因为键盘打错了,而是因为大脑。当你写一个类实现的接口时,你用逗号分隔它们。

标签: java generics


【解决方案1】:
<T extends MyClass & Serializable>

这断言单一类型参数T 必须扩展MyClass 并且必须是Serializable

<T extends MyClass , Serializable>

This 声明了两个 类型参数,一个称为T(必须扩展MyClass)和一个称为Serializable(隐藏java.io.Serializable — 这可能是警告的内容)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 2019-08-29
    • 1970-01-01
    • 2023-03-17
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多