java泛型机制的好处_java 泛型机制
Java 泛型
泛型这种语法机制,只在程序编译阶段起作用,只是给编译器参考的(运行阶段泛型没用)
使用泛型的好处是什么?
1.集合中存储的元素类型统一了
2.从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”
泛型的缺点是什么?
导致集合中存储的元素缺乏多样性
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class GenericTest {
public static void main(String[] args) {
//使用泛型List之后,表示List集合中只允许存储Animals的类型数据
List myList = new ArrayList();
Cat c = new Cat();
Bird b = new Bird();
myList.add(c);
myList.add(b);
//这个表示迭代器获取的是Animals类型
Iterator it = myList.iterator();
while (it.hasNext()){
//调用Animals类型的move方法不需要转换了
//Animals a = it.next();
//a.move();
//调用子类新的特有的方法时还是需要向下转换类型的
Animals a = it.next();
if (a instanceof Cat){
Cat cat = (Cat) a;
cat.doSomething();
}
if (a instanceof Bird){
Bird bird = (Bird) a;
bird.fly();
}
}
}
}
class Animals{
public void move(){
System.out.println("动物在移动");
}
}
class Cat extends Animals{
public void doSomething(){
System.out.println("猫捉老鼠");
}
}
class Bird extends Animals{
public void fly(){
System.out.println("鸟儿在飞");
}
}
泛型的自动类型推断机制(又称钻石表达式)
ublic class GenericTest {
public static void main(String[] args) {
//ArrayList<>(),<>里的类型会自动推断,这里自动推断为Animals
List myList = new ArrayList<>();
myList.add(new Animals());
myList.add(new Cat());
自定义泛型
public class GenericTest02 {
public static void main(String[] args) {
MyIterator m1 = new MyIterator<>();
String s1 = m1.get();
MyIterator m2 = new MyIterator<>();
Animals animals = m2.get();
System.out.println(animals);
}
}
//自定义泛型时,<>里的标识符可以随便写,一般写T 或 E
class MyIterator{
public T get(){
return null;
}
}
增强for(foreach)
//语法规则
for(元素类型 变量名 : 数组或集合){
System.out.println(变量名);
}
标签:Animals,myList,Cat,new,泛型,java,机制,public
来源: https://blog.csdn.net/qq_43652195/article/details/112131746
java泛型机制的好处_java 泛型机制相关推荐
- java 参数类型不确定_java泛型的那些事
学习泛型的理由 首先明确为什么需要学习泛型?个人觉得至少有三个理由:1.使用泛型可以让你在声明类(或者创建方法)的时候不着急立即去指定它的类型,而是等到你实例化对象(或者方法调用)的时候才明确它的类型 ...
- java什么是类型擦除_Java 泛型,你了解类型擦除吗?
泛型,一个孤独的守门者. 大家可能会有疑问,我为什么叫做泛型是一个守门者.这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇.泛型是 Java 中一个很小巧的概念,但 ...
- java类加载是什么意思_java 类加载机制有什么用
展开全部 AVA类加载机制详解 "代码编译的结果从本地机器码转变为字节码,是存储格式发展的一32313133353236313431303231363533e78988e69d8331333 ...
- java的沙盒安全模式_Java沙箱机制
自从 Java 技术出现以来, 有关 Java 平台的安全性及由 Java 技术发展所引发的新的安全性问题,引起了越来越多的关注.目前,Java 已经大量应用在各个领域,研究 Java 的安全 性对于 ...
- java类验证和装载顺序_Java类加载机制实现流程及原理详解
前言 我们知道,Java项目编译后会生成许许多多的class文件,class文件保存着类的描述信息.虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转化解析和初始化,最终形成可以被虚 ...
- java反射的编译过程_Java反射机制小结和实际操作
一.什么是反射 1.编译和运行 在了解什么是Java反射机制前,先聊聊Java的编译和运行. 还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文 ...
- java类验证和装载顺序_java类加载机制,你会了吗?
什么是类加载机制呢? java虚拟机将编译后的class文件加载到内存中,进行校验.转换.解析和初始化,到最终的使用.这就是java类加载机制: 下面就开始今天的内容: 1.类加载的生命周期:加载(L ...
- java什么时候用反射_Java反射机制使用场景
1 import java.io.*;2 importjava.util.Properties;3 4 /*问题描述:存在一个主板--已经定义好,不想修改其代码,还想在主板上面增加一些其他功能?5 * ...
- java泛型的逆变_Java泛型的逆变
在上篇<Java泛型的协变>这篇文章中遗留以下问题--协变不能解决将子类型添加到父类型的泛型列表中.本篇将用逆变来解决这个问题. 实验准备 我们首先增加以下方法,见代码清单1所示. 代码清 ...
最新文章
- Linux上实现ssh免密码登陆远程服务器
- 统计各个函数的耗时_Prometheus 常用函数 histogram_quantile 的若干“反直觉”问题...
- android 点击外部接收事件,Android Dialog外部点击事件
- Introduction or Why Should I Bother
- 关于注册登陆时候进行的归档解档--严焕培
- AjaxUploader使用
- SVN 分支/合并/切换
- mysql 创建删除表_mysql创建删除表的的详细解析
- SAP License:无奈的采购处理时间
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_15_常用的函数式接口_Predicate接口练习-集合信息的筛选...
- 快速突破面试算法之分治算法篇
- 安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (五)频谱仪截屏到U盘的程控实现
- java 毕向东_毕向东java视频目录
- 如何解决百度识图中图片被限制百度防盗链破解方法
- 深信服 华为路由器 ipsce对接
- windows 安装apex_apex 安装/使用 记录
- 读《读大学,究竟读什么》感悟一
- VB下载网页文件或图片的几种简易方法
- 棒材轧机轧制力矩matlab数学模型,一种普通热轧棒材的轧制力能校核计算方法与流程...
- LeetCode(七)