java中的泛型(自定义泛型)
引出问题
- 当我们在集合中加入数据的时候想要对数据进行约束。比如:就想传入自己创建的对象
- 遍历的时候,需要进行类型转换,如果结合中的数据量较大,对效率有影响
-
12345678910111213141516171819202122232425262728293031
import
java.util.*;
public
class
text {
public
static
void
main(String[] args) {
// ArrayList<Dog> 解释:如果指定泛型 这个ArrayList集合中只能传入Dog对象
ArrayList<Dog> AL =
new
ArrayList<>();
AL.add(
new
Dog(
"小黄"
,
3
));
//会报错,因为已经指定ArrayList中传入的类型了
AL.add(
new
Cat(
"小黑"
,
3
));
//这里会报错
}
}
class
Dog{
private
String name;
private
int
age;
public
Dog(String name,
int
age) {
this
.name = name;
this
.age = age;
}
}
class
Cat{
private
String name;
private
int
age;
public
Cat(String name,
int
age) {
this
.name = name;
this
.age = age;
}
}
泛型的好处
- 编译时,可以检查添加数据的类型,提高了安全性
- 减少了类型转化的次数,提高效率
泛型的注意事项
- 泛型只能是引用数据类型:Integer✅ int ❌
- 再给泛型指定具体类型后,可以传入该类型或继承该类型的子类
- 指定泛型可以是接口类型
自定义泛型(创建自己的类,自己定义泛型)
- 基本语法:class 类名<T , R , ..> { 成员 }
-
123456789101112131415161718192021222324252627282930313233
public
class
text {
public
static
void
main(String[] args) {
//当创建对象了,指定了 T 是Integer R是 String
Dog<Integer, String> dog =
new
Dog<>();
}
}
class
Dog<T,R>{
String name;
//以下表示正确,需要在创建的时候指定类型
T age;
R gender;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
T getAge(R r) {
//方法返回值可以是自定义泛型,形参也可以是泛型
return
age;
}
public
void
setAge(T age) {
this
.age = age;
}
public
R getGender() {
return
gender;
}
public
void
setGender(R gender) {
this
.gender = gender;
}
}
- 如果在创建是不指定 T 和 R 的类型 ,默认是Object
- 普通成员可以使用泛型(属性,方法)
- 使用泛型数组不能初始化,T[ ] t = new [8] ❌。 因为类型不确定,不知道开多大空间
- 静态方法不能使用泛型,静态属性同样,因为静态是和类相关的,在类加载时,对象还没有创建
泛型的继承和通配符
泛型不具备继承性。例如:List< Object > list = new ArrayList<String>( ); ❌ 错误,不具备继承
< ? >可以接受任意泛型类型
< ? extends AA>:表示可以接受AA类,或AA子类类型
< ? super AA>:表示可以接受AA类,和AA类的父类,Object也可以
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!