加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中的通用函数

发布时间:2020-12-15 04:28:04 所属栏目:Java 来源:网络整理
导读:我对 Java中的一些通用语法不太熟悉. 我遇到了一些像这样的代码: public staticT T foo(T... a) 有人能够以简洁的方式解释它的含义吗? 这是否意味着foo()接受类型为T的数组并返回类型T? 为什么不是这样的语法? public static T foo(T[] a) 我查看了Oracl
我对 Java中的一些通用语法不太熟悉.
我遇到了一些像这样的代码:

public static<T> 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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读