java通用函数_Java中的通用函数

我对Java中的一些通用语法不太熟悉.

我遇到了一些像这样的代码:

public static T foo(T... a)

有人能够以简洁的方式解释它的含义吗?

这是否意味着foo()接受类型为T的数组并返回类型T?

为什么不是这样的语法?

public static T foo(T[] a)

我查看了Oracle文档,但它们的示例似乎更容易理解:Oracle Generics

解决方法:

两件事情:

1)这是一个varargs方法,一种采用可变数量参数的方法.这与采用数组的方法不同(即使在引擎盖下使用数组实现).

您将此方法称为foo(a,b,c)(与foo(arrayWithABC)相反).

2)如果要使用泛型类型占位符T,则必须声明它.这正是第一个< T>确实.

公共静态T foo(T a)和公共静态< T>之间的差异. T foo(T a)是后者为该方法的范围引入了“局部”T.这意味着“方法返回任何类型参数的实例”.在第一个版本中,T需要是在其他地方声明的类型占位符(例如在类中作为整体)或类名.

由于< T>是完全不受限制的,你可以传递任何东西.泛型的作用是将返回值绑定到相同的类型.如果您只有公共静态Object foo(Object a),则可以传入一个Integer并返回一个String. T阻止了这一点.

如果你想限制可接受的类型,你可以做公共静态< T extends Number> T foo(T a).

标签:java,generics

来源: https://codeday.me/bug/20190727/1558430.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值