- Java类
- Java包
- Java方法
- Java访问
- Java创建
- Java对象(Object)
- Java内部类
- Java继承
- Java抽象类
- Java泛型类
- Java异常
- 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
类型或它的子类,没有问题。 但是,如果不是Number
类型或其子类型的任何东西都会在编译时被拒绝。
使用上限作为数字值(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;/*from w w w. j ava 2 s .co m*/ 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泛型方法和构造函数
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王