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 泛型机制相关推荐

  1. java 参数类型不确定_java泛型的那些事

    学习泛型的理由 首先明确为什么需要学习泛型?个人觉得至少有三个理由:1.使用泛型可以让你在声明类(或者创建方法)的时候不着急立即去指定它的类型,而是等到你实例化对象(或者方法调用)的时候才明确它的类型 ...

  2. java什么是类型擦除_Java 泛型,你了解类型擦除吗?

    泛型,一个孤独的守门者. 大家可能会有疑问,我为什么叫做泛型是一个守门者.这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇.泛型是 Java 中一个很小巧的概念,但 ...

  3. java类加载是什么意思_java 类加载机制有什么用

    展开全部 AVA类加载机制详解 "代码编译的结果从本地机器码转变为字节码,是存储格式发展的一32313133353236313431303231363533e78988e69d8331333 ...

  4. java的沙盒安全模式_Java沙箱机制

    自从 Java 技术出现以来, 有关 Java 平台的安全性及由 Java 技术发展所引发的新的安全性问题,引起了越来越多的关注.目前,Java 已经大量应用在各个领域,研究 Java 的安全 性对于 ...

  5. java类验证和装载顺序_Java类加载机制实现流程及原理详解

    前言 我们知道,Java项目编译后会生成许许多多的class文件,class文件保存着类的描述信息.虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转化解析和初始化,最终形成可以被虚 ...

  6. java反射的编译过程_Java反射机制小结和实际操作

    一.什么是反射 1.编译和运行 在了解什么是Java反射机制前,先聊聊Java的编译和运行. 还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文 ...

  7. java类验证和装载顺序_java类加载机制,你会了吗?

    什么是类加载机制呢? java虚拟机将编译后的class文件加载到内存中,进行校验.转换.解析和初始化,到最终的使用.这就是java类加载机制: 下面就开始今天的内容: 1.类加载的生命周期:加载(L ...

  8. java什么时候用反射_Java反射机制使用场景

    1 import java.io.*;2 importjava.util.Properties;3 4 /*问题描述:存在一个主板--已经定义好,不想修改其代码,还想在主板上面增加一些其他功能?5 * ...

  9. java泛型的逆变_Java泛型的逆变

    在上篇<Java泛型的协变>这篇文章中遗留以下问题--协变不能解决将子类型添加到父类型的泛型列表中.本篇将用逆变来解决这个问题. 实验准备 我们首先增加以下方法,见代码清单1所示. 代码清 ...

最新文章

  1. Linux上实现ssh免密码登陆远程服务器
  2. 统计各个函数的耗时_Prometheus 常用函数 histogram_quantile 的若干“反直觉”问题...
  3. android 点击外部接收事件,Android Dialog外部点击事件
  4. Introduction or Why Should I Bother
  5. 关于注册登陆时候进行的归档解档--严焕培
  6. AjaxUploader使用
  7. SVN 分支/合并/切换
  8. mysql 创建删除表_mysql创建删除表的的详细解析
  9. SAP License:无奈的采购处理时间
  10. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_15_常用的函数式接口_Predicate接口练习-集合信息的筛选...
  11. 快速突破面试算法之分治算法篇
  12. 安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (五)频谱仪截屏到U盘的程控实现
  13. java 毕向东_毕向东java视频目录
  14. 如何解决百度识图中图片被限制百度防盗链破解方法
  15. 深信服 华为路由器 ipsce对接
  16. windows 安装apex_apex 安装/使用 记录
  17. 读《读大学,究竟读什么》感悟一
  18. VB下载网页文件或图片的几种简易方法
  19. 棒材轧机轧制力矩matlab数学模型,一种普通热轧棒材的轧制力能校核计算方法与流程...
  20. LeetCode(七)

热门文章

  1. git 使用详解(8)-- tag打标签
  2. GridView绑定时通过RowDataBound事件获取数据源列值
  3. 有空时深入阅读这两篇文章
  4. 70.ER模型转化成关系模型是在数据库设计的第几个阶段?
  5. C++语言之继承中的特点
  6. 《学习OpenCV3(中文版)》图书目录
  7. select sqlite 唯一_SQLite Select 语句
  8. java list 不包含_java判断list是否包含某个值
  9. Redis缓存穿透、击穿、雪崩及主从复制
  10. lsm tree java_LSM-tree 基本原理及应用