package com.xiaoshan.invariance;
import java.util.ArrayList;
import java.util.List;
//泛型对协变和逆变的支持 演示程序
public class InvarianceDemo {
static class Super {
@Override
public String toString() {
return "Super{}";
}
}
static class Sub extends Super {
@Override
public String toString() {
return "Sub{}";
}
}
// public static void test1() {
//
// // 1、不支持协变
// // 编译不通过:Required type: List <Super>. Provided: ArrayList <Sub>
// List<Super> superList1 = new ArrayList<Sub>();
//
// // 编译不通过:Required type: List <Super>. Provided: List <Sub>
// List<Sub> subList1 = new ArrayList<>();
// List<Super> superList = subList1;
//
//
// // 2、不支持逆变
// // 编译不通过:Required type: List <Sub>. Provided: ArrayList <Super>
// List<Sub> subList2 = new ArrayList<Super>();
//
// // 编译不通过:Required type: List <Sub>. Provided: List <Super>
// List<Super> superList2 = new ArrayList<>();
// List<Sub> subList = superList2;
// }
public static void test2() {
// 1、实现协变
// 创建一个泛型为 Super 的列表 list,其类型为 List<? extends Super>
List<? extends Super> list = new ArrayList<Super>();
// 创建一个子类为 Sub 的列表 subList 并向其中添加两个新的 Sub 对象
List<Sub> subList = new ArrayList<>();
subList.add(new Sub());
subList.add(new Sub());
// 将 subList 赋值给 list 变量,因为 subList 是一个子类列表,可以赋值给泛型为 Super 的列表
list = subList;
System.out.println(list);
// 2、实现逆变
// 创建一个泛型为 Sub 的超类列表 list2,其类型为 List<? super Sub>
List<? super Sub> list2 = new ArrayList<Sub>();
// 创建一个超类为 Super 的列表 superList 并向其中添加两个新的 Super 对象
List<Super> superList = new ArrayList<>();
superList.add(new Super());
superList.add(new Super());
// 将 superList 赋值给 list2 变量,因为 superList 是一个超类列表,可以赋值给泛型为 Sub 的列表
list2 = superList;
System.out.println(list2);
}
public static void main(String[] args) {
test2();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本代码资源是一个关于Java语言中泛型的讲解案例代码。通过使用实际的示例代码,详细讲解了泛型的定义、用法和优势。 适用人群: 有一定Java编程基础的开发者;对泛型概念感兴趣或希望加深理解的学习者。 使用场景: 学习和理解Java泛型的基本概念和语法; 实际项目中需要使用泛型来增加类型安全性和重用性的开发任务。 目标: 本代码资源的目标是帮助读者理解泛型的用法和优势,并通过实际的示例代码加深对泛型的掌握。读者可以通过运行这些示例代码来观察泛型的行为和效果,进一步加深对泛型的理解。 代码资源中会包含以下示例代码: 定义泛型类:展示如何定义一个简单的泛型类,以及如何创建该类的实例并使用泛型参数。 泛型方法:演示如何在普通类中定义泛型方法,以及如何调用和使用泛型方法。 类型通配符:展示如何使用类型通配符来增加灵活性,以及如何进行类型边界约束。 泛型接口:演示如何定义和实现泛型接口,并通过示例代码展示泛型接口的应用。 希望这个代码资源能够帮助你更好地理解和应用Java中的泛型概念。祝你编程愉快!
资源推荐
资源详情
资源评论
收起资源包目录
src.zip (13个子文件)
src
com
xiaoshan
genericinterface
Box.java 452B
GenericsInterfaceDemo.java 514B
Container.java 229B
unboundedwildcard
UnboundedWildcardDemo.java 1013B
lowerboundedwildcard
Fruit.java 495B
LowerBoundedWildcardDemo.java 562B
invariance
InvarianceDemo.java 2KB
typeerasure
TypeErasureDemo.java 752B
genericmethod
ArrayUtils.java 307B
GenericMethodDemo.java 397B
upperboundedwildcard
UpperBoundedWildcardDemo.java 741B
genericclass
GenericClassDemo.java 420B
Box.java 385B
共 13 条
- 1
资源评论
小山code
- 粉丝: 1w+
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功