泛型
1.泛型方法
public static <T> void method(T t){}
public static <T> T method(T t){
return (T)new Object();
}
public static <E extends Person> void method2(E e){
System.out.println(e.getName());
}
2.泛型类
public class Test<T> {
public T data;
}
public class PersonOpert implements GenericInterface<Person, User> {
@Override
public int add(Person t) {
return 0;
}
@Override
public int edit(Person t, User e) {
return 0;
}
@Override
public Person get(Integer id) {
return null;
}
@Override
public int delete(Integer id) {
return 0;
}
}
3.泛型接口
interface Operator<T>{
void add(T t);
}
public interface GenericInterface<T, E> {
public int add(T t);
public int edit(T t, E e);
public T get(Integer id);
public int delete(Integer id);
}
4. 泛型的一些规则和限制
* 泛型的类型参数只能是类类型(包括自定义类),不能是基本数据类型。
* 泛型的类型参数可以有多个。
* 泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。
* 泛型的参数类型还可以是通配符类型。
5.? 通配符类型
* <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类
* <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object
* List<? extends Fruit> flist = new ArrayList<Apple>();
* List<? extends Fruit> 表示 “具有任何从Fruit继承类型的列表”,编译器无法确定List所持有的类型,所以无法安全的向其中添加对象。可以添加null,因为null 可以表示任何类型。所以List 的add 方法不能添加任何有意义的元素,但是可以接受现有的子类型List<Apple> 赋值。
* List<? super Fruit> 表示“具有任何Fruit超类型的列表”,列表的类型至少是一个 Fruit 类型,因此可以安全的向其中添加Fruit 及其子类型。由于List<? super Fruit>中的类型可能是任何Fruit 的超类型,无法赋值为Fruit的子类型Apple的List<Apple>.
6.泛型的作用
泛型提供了编译期的类型安全,确保你只能把正确类型的对象放入JavaSE中,避免了在运行时出现ClassCastException。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现