java泛型支持Void?

Java泛型与Void
本文探讨了Java泛型中Void类型的使用情况。虽然Java泛型支持Void类型参数,但在实际编写方法时仍需提供返回值,这使得Void的支持显得不够完善。

C#中的泛型有时会被人吐槽不支持void。试了一下Java的泛型,发现泛型参数类型中,Void(不是void)是支持的,编译不报错。但是真的的写方法的时候,还是要输入返回值。

比如下面的代码

    @Override
    public Void call() {

        return null;

    }

你不得不返回一个null,不然编译会不过的。所以说,Java泛型虽然支持了Void,但看上去就是一个假象。

转载于:https://blog.51cto.com/cnn237111/2055451

### Java 通配符 `?` 的用途 Java 中的通配符 `?` 提供了一种灵活的方式来处理未知类的集合或其他结构。通过使用通配符,可以在保持类安全的同时增强代码的灵活性。 #### 无界通配符 `<?>` 当不确定或不需要指定具体的类时,可以使用无界通配符 `<?>`。这表示该位置上的类是任意的,但一旦声明为 `<?>` 后,就无法向其中添加任何元素(除了 `null`),因为编译器不知道实际的类是什么[^3]。 ```java public void printList(List<?> list) { for (Object elem : list) { System.out.print(elem + " "); } System.out.println(); } ``` 这段代码展示了如何遍历并打印一个包含任意类元素的列表,而不必关心具体存储的是什么类的数据。 #### 上限通配符 `<? extends T>` 上限通配符用于限定参数的具体范围,即所指代的类必须是指定类 `T` 或者它的子类。这种方式使得可以从容器中读取数据作为 `T` 类来使用,但不允许写入新的对象到容器里,除非这些新对象也是 `T` 类或者是更通用的对象如 `null`[^2]。 ```java public double sumOfNumbers(List<? extends Number> numbers) { double sum = 0.0; for (Number num : numbers) { sum += num.doubleValue(); } return sum; } // 调用示例 List<Integer> integers = Arrays.asList(1, 2, 3); System.out.println(sumOfNumbers(integers)); ``` 此函数能够接受整数、浮点数等各种数值类的列表,并计算总和。 #### 下限通配符 `<? super T>` 相反地,下限通配符则用来规定参数至少要达到某一层级及以上——也就是说它可以接收给定类 `T` 自身以及所有超类(`super`)形式的输入。这种情况下允许往里面放入特定类的实例及其祖先类的实例[^5]。 ```java public static void addElements(List<? super Integer> list) { list.add(1); // 正确:Integer 是 Integer 的子类 list.add(new Object()); // 错误:Object 并不是 Integer 的父类 } ``` 在这个例子中,虽然可以直接向列表中添加 `Integer` 实例,但如果尝试加入其他非继承自 `Integer` 的对象就会报错。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值