举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > java 泛型 约束 Java 泛型约束

java 泛型 约束 Java 泛型约束

2023-03-25 04:18 Java教程

java 泛型 约束 Java 泛型约束

java 泛型 约束

Java 泛型约束是 Java 编程语言中的一种机制,它允许在编译时对参数化类型进行检查。泛型约束可以帮助开发人员在使用泛型时避免出错,并且可以提高代码的可读性。

Java 泛型约束的主要目的是为了保证在使用泛型时,传递的参数是正确的。例如,如果一个方法声明了一个泛型参数 T,那么在调用这个方法时,传递的参数必须是 T 的子类。这样就能够保证传递的参数是正确的,而不会出错。

public class MyClass<T extends Number> { 
    public void doSomething(T t) { 
        // do something with t 
    } 
}

上面代码中定义了一个 MyClass 类,它声明了一个泛型 T,并使用 extends 关键字将 T 的边界设定为 Number 类。这样就能够保证在调用 doSomething() 方法时传递的参数必须是 Number 的子类。

Java 泛型约束

Java面向对象设计 - Java泛型约束

无限通配符

通配符类型由问号表示,如<?> 。

对于通用类型,通配符类型是对象类型用于原始类型。

我们可以将任何已知类型的泛型分配为通配符类型。

这里是示例代码:

// MyBag  of  String type
MyBag<String> stringMyBag  = new MyBag<String>("Hi");

// You can  assign a  MyBag<String> to  MyBag<?> type
MyBag<?> wildCardMyBag  = stringMyBag;

通配符通配类型中的问号(例如,<?>)表示未知类型。

当您使用通配符声明参数化类型作为参数类型时,这意味着它不知道它的类型。

MyBag<?> unknownMyBag = new MyBag<String>("Hello");

上限通配符

我们表示通配符的上限

<? extends T>

这里,T是一种类型。<? extends T>表示任何类型为T或其子类是可接受的。

例如,上限可以是数字类型。

如果我们通过任何其他类型,该类型是数字类型的子类,很好。但是,不是Number类型或其子类型的任何东西都应该在编译时被拒绝。

使用上限作为数字,我们可以将方法定义为

class MyBag<T> {
  private T ref;

  public MyBag(T ref) {
    this.ref = ref;
  }

  public T get() {
    return ref;
  }

  public void set(T a) {
    this.ref = a;
  }
}

public class Main {
  public static double sum(MyBag<? extends Number> n1,
      MyBag<? extends Number> n2) {
    Number num1 = n1.get();
    Number num2 = n2.get();
    double sum = num1.doubleValue() + num2.doubleValue();
    return sum;
  }

}

不管你为n1和n2传递什么,它们将始终与Number的赋值兼容,因为编译器确保传递给sum()方法的参数遵循其声明中指定的规则 <? extends Number>。


下限通配符

指定下限通配符与指定上限通配符相反。

使用下限通配符的语法是<? super T>,这意味着“任何是T的超类型”。

class MyBag<T> {
  private T ref;

  public MyBag(T ref) {
    this.ref = ref;
  }

  public T get() {
    return ref;
  }

  public void set(T a) {
    this.ref = a;
  }
}
public class Main {
  public static <T> void copy(MyBag<T> source, MyBag<? super T> dest) {
    T value = source.get();
    dest.set(value);
  }
}
阅读全文
以上是编程学为你收集整理的java 泛型 约束 Java 泛型约束全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部