Java知识(泛型)

泛型
泛型: 应该存储相同的数据类型,泛型的本质是参数化类型,也就是说操作的数据类型被指定为一个参数,用在类、接口、方法创建中。没有泛型的情况下,通过对类型Object的引用来实现参数的"任意化","任意化"的缺点是要做显式的强制类型转换
使用泛型的意义:
1.约束了数据存储的类型
2.使用get的方法得到的数据类型是确定的
泛型语法: <Object>必须是引用数据类型,如果存储基本数据类型,就要转换成相应的包装类

泛型的特点:
1.泛型的类型只能是类类型(包括自定义类型),不能是简单类型(基本数据类型)。
2.同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容。
3.泛型的类型参数可以有多个
4.泛型的参数类型可以使用extends和super,例如<T extends Number>,其中T必须是Number类或者Number的子类;<T super Number>,其中T必须是Number或者Number的父类,这两种习惯上称为"有界类型",。
5.泛型的参数类型还可以是通配符类型,例如:Class<?>classType=Class.forName("java.lang.String")
?是通配符,可以代指任意类型,一般用在方法的参数里

定义集合时使用泛型:
public class Ch04 {
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
int a=list.get(0);
}
}
在定义类时使用泛型:
public class Human<T,E,K,V> {
private T t;
private E e;
private K k;
private V v;
public Human(T t, E e, K k, V v) {
super();
this.t = t;
this.e = e;
this.k = k;
this.v = v;
}
public void test(){
System.out.println(t.getClass().getName());
System.out.println(e.getClass().getName());
System.out.println(k.getClass().getName());
System.out.println(v.getClass().getName());
}
public static void main(String[] args) {
Human<String,Integer,String,Integer> human=new Human<String,Integer,String,Integer>("a",1,"b",2);
human.test();
}
}
输出结果:java.lang.String
java.lang.Integer
java.lang.String
java.lang.Integer
利用extends定义泛型
public class A<T extends Number> {
public static void main(String[] args) throws ClassNotFoundException {
A<Number> a=new A<>();
List<Number> list=new ArrayList<>();
}
//super传入的类型必须是Number或Number的父类
//extends传入的类型必须是Number或Number的子类
//?通配符,可以代指任意类型,方法的参数里
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值