本文主要是介绍Java面向对象设计 - 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泛型约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!