图中红框是什么意思?
<U>是什么意思?
是否可以去掉?
如果可以去掉<U>那么和原来的对比有什么区别?
U不已经表明了是返回值是U?那么U的前面<U>的作用是什么?第二张图的T前面并没有<T>也能表明了返回值是T
图中红框是什么意思?
<U>是什么意思?
是否可以去掉?
如果可以去掉<U>那么和原来的对比有什么区别?
U不已经表明了是返回值是U?那么U的前面<U>的作用是什么?第二张图的T前面并没有<T>也能表明了返回值是T
二次更新:
<T>
的声明在这个类啊,你看这个类的声明是不是:
public Something <T> {
///
}
类似这种的。
你直接用 U
来标识返回值,JVM 会去找 U.class
这个类型,但是很显然它是不存在的,所以用 <U>
来标识让虚拟机等到运行这个方法时再去看 U
对应的实际类型。这里涉及到 Java 的泛型擦除问题,可以自行查阅一些文章。
更新:
泛型可以比被理解为"允许此处接受任意类型参数",但是一般用法是用于要求多处参数的类型、泛型参数类型有一定关联。
比如图片中使用泛型后,identity
则必须与 accumulator
的两个输入参数之一及其返回值为同一类型,同时 combiner
接受的参数类型也必须与 identity
一致。
eg.
当 identity
是个 String
,则 accumulator
的第一个参数和返回值都必须为 String
类型,否则报错。
这是用 Object
来表示 "允许此处接受任意类型参数" 时所达不到的表达能力。
百度 "泛型参数类型" 以获取更多详细内容。
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
第一个
<U>
是声明,表明此类型参数是此方法独有的,后一个U
表明方法返回类型是U
建议题主多去看下相关基础书籍,以下截图截自《core java Ⅰ》中文译版 第10版

