【Java】泛型中extends和super的理解

Java 泛型中的 extendssuper 是用来限制泛型类型参数的上限和下限的关键字。它们可以在定义泛型类、泛型方法、泛型接口时使用。

extends 关键字用于限制泛型类型参数的上限,表示该泛型类型参数必须是指定类型或指定类型的子类。例如:

public class GenericClass<T extends Number> {
    // ...
}

在这个泛型类中,T 的类型参数被限制为 Number 类型或其子类,例如 IntegerDouble 等。这样定义后,如果我们创建这个泛型类的实例时,T 类型的实参必须是 NumberNumber 的子类。

super 关键字用于限制泛型类型参数的下限,表示该泛型类型参数必须是指定类型或指定类型的父类。例如:

public class GenericClass<T super Integer> {
    // ...
}

在这个泛型类中,T 的类型参数被限制为 Integer 类型或其父类。这样定义后,如果我们创建这个泛型类的实例时,T 类型的实参必须是 IntegerInteger 的父类。

总的来说,extendssuper 关键字的作用是限制泛型类型参数的范围,使得泛型类型参数在使用时更加安全和可靠。

举个例子:

在 Java 中,<R, C extends Column<R>> 是一个泛型类型参数的声明,其中:

  • <R, C> 表示这是一个包含两个类型参数的泛型类型参数声明。
  • extends Column<R> 表示泛型类型参数 C 是一个继承自 Column<R> 类的类型。

这个声明可以被用于定义方法参数、返回类型、类或接口的类型参数等。

具体来说,这个声明的意思是:

  • R 表示这个泛型类型参数中要使用的类型参数,它可以是任何合法的 Java 类型。
  • C 表示这个泛型类型参数中要使用的类型参数,它必须是继承自 Column<R> 的类型,也就是说 C 类型必须包含一个类型参数为 RColumn 类型。

Column 类型可能是一个抽象类或者接口,也可能是一个具体的类,它的定义可能类似于:

public abstract class Column<R> {
    public abstract R getValue();
    public abstract void setValue(R value);
    // ...
}

或者:

public class StringColumn extends Column<String> {
    private String value;
    // ...
}

因此,<R, C extends Column<R>> 声明的类型参数 C 表示一个继承自 Column<R> 的类,可以使用 R 来指定这个类型的值类型。当使用这个类型参数时,需要提供一个满足条件的具体类型,例如:

public <R, C extends Column<R>> void someMethod(C column) {
    // ...
}

StringColumn column = new StringColumn();
someMethod(column);

在上面的例子中,C 被替换为 StringColumn,而 R 被替换为 String。因此,column 参数的类型是 StringColumn,它继承自 Column<String>

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值