我正在研究应用程序中的一些旧代码,发现使用Java泛型。
能告诉我,两者之间有什么区别
Class<? extends T>
和
Class<? extends ?>
我不清楚如何以及何时使用这些泛型。
答案 0 :(得分:4)
Class<? extends ?>
在Java中不是有效的类型。
Class<? extends T>
是Java中的有效类型。
答案 1 :(得分:1)
Class<? extends T
>示例:
Class<? extends Number>
可以是Class<Number>
,Class<Integer>
,Class<BigDecimal>
等...换句话说,就是 any 扩展了的类 Number
类。在编译时间检查!
另一方面,Class<? extends ?>
可以解释为扩展任何类的任何类的类,这是胡说八道。
编辑:
您正在要求使用。这是一个使用List<? extends Number>
来计算列表中所有数字的和和平均值的代码示例:
public class Help {
private static BigDecimal sum(List<? extends Number> list) {
return list == null || list.isEmpty() ?
BigDecimal.ZERO :
list.stream()
.map(n -> new BigDecimal(n.doubleValue()))
.reduce(BigDecimal::add)
.get();
}
private static BigDecimal average(List<? extends Number> list) {
return list == null || list.isEmpty() ?
BigDecimal.ZERO :
sum(list).divide(BigDecimal.valueOf(list.size()), MathContext.DECIMAL32);
}
public static void main(String[] args) {
List<Number> numbers =
List.of(
1.0D, /*double*/
2.0F, /*float*/
3L, /*long*/
new BigInteger("4"), /*BigInteger*/
new AtomicInteger(5), /*just for test*/
(int)'a' /*int*/
);
System.out.println("sun of " + numbers + " = " + sum(numbers));
System.out.println("avg of " + numbers + " = " + average(numbers));
System.out.println("sum of empty list = " + sum(List.of()));
System.out.println("avg of empty list = " + average(List.of()));
System.out.println("sum of null list = " + sum(null));
System.out.println("avg of null list = " + average(null));
}
}
我希望您可以从此代码中获得一些基本提示。