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

java – 通用方法类型参数

发布时间:2020-12-15 04:08:33 所属栏目:Java 来源:网络整理
导读:我有这个方法,它采用类型T的3个参数来实现接口Comparable public static T extends Comparable T T maximum( T x,T y,T z ) {} 我问的是以其他方式声明这个,如下所示(假设它将任何Comparable对象作为其参数) public static Comparable T T maximum (T x,T z)
我有这个方法,它采用类型T的3个参数来实现接口Comparable

public static < T extends Comparable< T > > T maximum( T x,T y,T z ) {}

我问的是以其他方式声明这个,如下所示(假设它将任何Comparable对象作为其参数)

public static <Comparable <T>> T maximum (T x,T z){}

另一个问题,在第一个声明中,我知道Comparable是一个接口,所以它为什么写成< T extends Comparable< T>>而不是< T实现Comparable< T>> ??

解决方法

您的两个问题都可以通过以下方式解答:这是Java语法.在Java语言中,参数化方法声明如下:

[optional modifiers] <T> [return type] foo() {}

它声明了一个名为T的类型参数,可以使用语法约束上限:

T extends [type expression]

在方法的其余部分(返回类型,形式参数列表,方法体)T指的是调用方法时传递的类型.在如下声明中:

Comparable<T>

T不是类型参数,但它是用于实例化参数化类型Comparable< E>的类型参数,并且属于更大的范围,例如:

class Foo<T> {
  public Comparable<T> foo(T arg1,T arg2) {}
}

注意,文本< Comparable< T>> (源角括号中包含的类型)根本不允许.它对编译器没有任何意义,编译器将拒绝编译该文件.

同样,关于第二个问题,extends只是Java语言中的一个关键字,它有两个不同的含义:

>它可以在类声明中用于继承另一个类
>它可用于在类型参数上设置上限

Java创建者可能已决定使用不同的关键字来区分这两种情况,但他们只是重载现有的一种,因为他们觉得开发人员更容易记住.但它们肯定是不同的关键字,这就是为什么在声明类型参数的上限时不使用工具的原因.

(编辑:李大同)

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

    推荐文章
      热点阅读