首页 / JAVA / Java基础(学习笔记)之泛型
Java基础(学习笔记)之泛型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java基础(学习笔记)之泛型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3185字,纯文字阅读大概需要5分钟。
内容图文
![Java基础(学习笔记)之泛型](/upload/InfoBanner/zyjiaocheng/739/5d79255d83e34950aeaf4b779596f902.jpg)
泛型
Java集合有一个缺点,把一个对象丢进集合中,集合就会忘记这个对象的数据类型,该对象的类型就变为Object类型。Java集合之所以这样设计 因为集合的设计者不知道要存储的类型是什么,为了做到通用性设计为Obejct 。
为了解决这个问题 设计了泛型的概念。 所谓的泛型就是在创建集合的时候指定集合的类型。
1.泛型的使用
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
//在创建集合的时候指定集合的类型 这种行为就是泛型
List<String> strList =new ArrayList<String>();
strList.add("aaaa");
strList.add("bbbb");
strList.add("cccc");
strList.add("ddddd");
// strList.add(23);
strList.forEach(str->System.out.println(str.length()));
}
}
2.Java7泛型的菱形语句
Java7的菱形语法 后方的数据类型可以省略 系统会自动判断数据类型
例如:List books =new ArrayList<>();
3.定义泛型类和泛型接口
public class Apple<T> {
// 使用T类型的参数 定义实例变量
private T info;
public Apple() {
}
public Apple(T info) {
this.info=info;
}
public T getInfo() {
return info;
}
public void setInfo(T info) {
this.info = info;
}
public static void main(String[] args) {
Apple<String> al =new Apple<String>("苹果");
System.out.println(al.getInfo());
Apple<Double> a2 =new Apple<>(3.21);
System.out.println(a2.getInfo());
}
}
4.从泛型类中派生子类
public class DemoA<T> extends Apple<T> {
//子类继承泛型父类 需要明确数据类型 或者 继续使用泛型
@Override
public T getInfo() {
return super.getInfo();
}
}
public class DemoB extends Apple<String> {
@Override
public String getInfo() {
return "子类"+super.getInfo();
}
}
5.泛型方法
import java.util.ArrayList;
import java.util.Collection;
public class GenericMethodTest {
//把一个数组中的数据 存储到集合中
public static void fromArrayToCollection(Object [] arr,Collection<Object> coll) {
for (Object obj : arr) {
coll.add(obj);
}
}
//使用泛型实现上述功能 下方描述这是一个泛型方法
public static <T> void fromArrayToCollectionGeneric(T [] arr,Collection<T> coll) {
for(T o:arr) {
coll.add(o);
}
}
public static void main(String[] args) {
Object [] oa =new Object[100];
Collection<Object> co =new ArrayList<>();
fromArrayToCollection(oa,co);
//下面的代码T代表Object类型
fromArrayToCollectionGeneric(oa,co);
String [] sa =new String[100];
Collection<String> cs =new ArrayList<>();
//下面的代码T代表String类型
fromArrayToCollectionGeneric(sa,cs);
Integer [] ia =new Integer[100];
Float [] fa =new Float[100];
Number [] na =new Number[100];
Collection<Number> cn =new ArrayList<>();
//下面的代码T代表Number类型
fromArrayToCollectionGeneric(ia,cn);
fromArrayToCollectionGeneric(fa,cn);
//下面的代码T代表Object类型
fromArrayToCollectionGeneric(na,co);
//下面的代码报错,其中T代表String类型 而na是NUmber类型 不是String的子类 所以报错
// fromArrayToCollectionGeneric(na,cs);
}
}
6.泛型擦除和转换
Java中的泛型是假泛型 ,仅仅是在编译期有效,在运行期是不存在的。
当把一个具有泛型信息的对象赋值给另外一个没有泛型信息的变量时候,所有在尖括号之间的类型信息都将被扔掉。
public static void main(String[] args) {
Apple<Integer> a =new Apple<Integer>(6);
//as将得到集合大小
Integer as =a.getSize();
//把a对象赋值给apple变量b 将丢失尖括号的类型信息
Apple b=a;
//b只只是getSize返回的类型是Number类型 所以不报错
Number as2=b.getSize();
//下面的代码将报错 是由于在对b进行赋值丢失了数据类型 所以报错
// Integer as3 =b.getSize();
}
内容总结
以上是互联网集市为您收集整理的Java基础(学习笔记)之泛型全部内容,希望文章能够帮你解决Java基础(学习笔记)之泛型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。