返回值类型<U> U

图中红框是什么意思?
<U>是什么意思?
是否可以去掉?
如果可以去掉<U>那么和原来的对比有什么区别?

U不已经表明了是返回值是U?那么U的前面<U>的作用是什么?第二张图的T前面并没有<T>也能表明了返回值是T

clipboard.png

clipboard.png

阅读 4.1k
3 个回答

第一个<U>是声明,表明此类型参数是此方法独有的,后一个U表明方法返回类型是U


建议题主多去看下相关基础书籍,以下截图截自《core java Ⅰ》中文译版 第10版
图片描述
图片描述

第一个<U>不能删除。删除的话,编译器会认为你的方法返回一个名称为U的类(U.class),会找不到。
这个<U>就是用来告诉编译器,我这里要返回一个泛型,不用管我

二次更新:

<T> 的声明在这个类啊,你看这个类的声明是不是:

public Something <T> {
    ///
}

类似这种的。

你直接用 U 来标识返回值,JVM 会去找 U.class 这个类型,但是很显然它是不存在的,所以用 <U> 来标识让虚拟机等到运行这个方法时再去看 U 对应的实际类型。这里涉及到 Java 的泛型擦除问题,可以自行查阅一些文章。


更新:

泛型可以比被理解为"允许此处接受任意类型参数",但是一般用法是用于要求多处参数的类型、泛型参数类型有一定关联。

比如图片中使用泛型后,identity 则必须与 accumulator 的两个输入参数之一及其返回值为同一类型,同时 combiner 接受的参数类型也必须与 identity 一致。

eg.
identity 是个 String,则 accumulator 的第一个参数和返回值都必须为 String 类型,否则报错。

这是用 Object 来表示 "允许此处接受任意类型参数" 时所达不到的表达能力。


百度 "泛型参数类型" 以获取更多详细内容。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题