首页 > 编程语言 >Java基础-学习笔记15

Java基础-学习笔记15

时间:2024-08-28 16:19:45浏览次数:4  
标签:15 自定义 使用 笔记 Person 接口 类型 泛型 Java

15 泛型

1. 泛型

  • 泛型的好处
  1. 编译时,检查添加元素的类型,提高了安全性
  2. 减少了类型转换的次数,提高效率

比如:ArrayList arr = new ArrayList();
在放入时,如果添加 Dog 类到 arr 里,编译器发现添加的类型不满足要求,就会报错;
在取出时,直接取出 Person 类,就不用再转型使用。

  • 泛型的介绍
  1. 泛型又称参数化类型(一种表示数据类型的数据类型),是JDK5.0 出现的新特性,解决数据类型的安全性问题。
  2. 在类声明或实例化时只要制定好需要的具体类型即可。
  3. Java泛型可以保证如果程序在编译时没有发生警告,运行时就不会产生。
  4. 泛型的作用是:可以在类声明时通过一个表示表示类中某个属性的类型,或是某个方法的返回值类型,或是参数类型。
class Person<E>
{
  String s; // 定义 s 的类型是 String,如果不确定是什么类型,可以用E表示
  E s1;  // 那么这个s1的类型,就是在创建或定义这个Person对象的时候再指定
}
Person<Integer> p1 = new Person<Integer>(); 
// 编译器会用 Integer 替换 E,即,指定 s1 为Interger类型
  • 泛型的语法
interface 接口<T>{} 和 class 类<K,V>{}
// T、K、V 不代表值,表示类型,任意字母都可以。

2. 自定义泛型

  • 2.1 自定义泛型类

基本语法

class 类名<T,R...>  // ...表示可以有多个泛型
{
  成员
}

使用细节:

1)普通成员可以使用泛型(属性、方法)
2)使用泛型的数组,不能初始化(因为不确定类型时无法在内存开辟空间)
3)静态方法中不能使用类的泛型
4)泛型类的类型,实在创建对象时确定的(因为创建对象时,需要指定确定类型)
5)如果在创建对象时,没有指定类型,默认为Object

  • 2.2 自定义泛型接口

基本语法

interface 接口名<T,R...>
{
}

1)接口中,静态成员也不能使用泛型
2)泛型接口的类型,在继承或实现接口时确定
3)没有指定类型,默认为Object

  • 2.3 自定义泛型方法

基本语法

修饰符 <T,R...> 返回类型 方法名(参数列表)
{
}

使用细节

1)泛型方法,可以定义在普通类中,也可以定义在泛型类中
2)当泛型方法被调用时,类型会确定
3)public void eat(E e){},修饰符后没有<T,R...>,eat方法不是泛型方法,而是使用了泛型
4)泛型方法可以使用类声明的泛型,也可以使用自己声明的泛型

  • 2.4 泛型的继承和通配符

1)泛型不具备继承性
List<Object> list = new ArrayList<String>(); // 错误
2)<?> : 支持任意泛型类型
3)<?extends A>: 支持A类以及A类的子类,规定了泛型的上限
4)<?super A>: 支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

标签:15,自定义,使用,笔记,Person,接口,类型,泛型,Java
From: https://www.cnblogs.com/97gogo/p/18383529

相关文章

  • MybatisPlus学习笔记
    MyBatisPlus从入门到精通1.概述MybatisPlus是一款Mybatis增强工具,用于简化开发,提高效率。它在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。官网:https://baomidou.com/2.快速入门2.0准备工作①准备数据CREATETABLE`user`(`id`bigint(20)NOTNULL......
  • java增加注解实现异步执行任务
    1.首先启动类增加注解@EnableAsync2.增加configpackagecom.xxx.config;importorg.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.annotation.A......
  • ubuntu20.04内核重新编译(5.15.x)
    一、源码获取方法1:gitclonegit://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/focal方法2:#apt-cachesearchlinux-sourcelinux-source-LinuxkernelsourcewithUbuntupatcheslinux-source-5.4.0-Linuxkernelsourceforversion5.4.0with......
  • AP5151线性降压LED恒流芯片 2.7-5.5V 照明手电筒、台灯、矿灯方案
    概述AP5151是一种低压差、线性降压、固定输出电流的LED恒流驱动器。除LED外,AP5151无需外接其它元器件即可构成一个恒流输出的LED驱动电路。AP5151内置过热保护功能,可有效保护芯片,避免结温超过120°C时因过热而造成损坏。AP5151还集成了LED短路保护、电源欠压......
  • 系统架构师考试学习笔记第二篇——架构设计专业知识(6)系统工程基础知识
    本章节考点分析:        第6课时主要学习系统工程和系统性能等内容。根据考试大纲,本课时知识点会涉及单项选择题,约占2~5分。本课时内容侧重于概念知识也会有计算题。根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,考查的知识点多来源于教材,扩展内容较......
  • Spring超硬核笔记———全是干货
    为什么用spring?Spring的核心功能IOC(控制反转,依赖注入),AOP(面向切面的编程)IOC:我们在使用过程中不用关注于对象是怎么创建的,只用应用过去,sping自动帮我们完成注入,对象的创建,spring默认创建对象是单例,这样减少了频繁创建对象,让对象重复利用,所有的对象都是放在BeanFactory工厂......
  • Effective Java理解笔记系列-第1条-何时考虑用静态工厂方法替代构造器?
    为什么写这系列博客?在阅读《EffectiveJava》这本书时,我发现有许多地方需要仔细认真地慢慢阅读并且在必要时查阅相关资料才能彻底搞懂,相信有些读者在阅读此书时也有类似感受;同时,在解决疑惑的过程中,还存在着有些内容不容易查找、查找到的解答质量不高等问题,于是我决定把我阅读此书......
  • Java后端微服务架构下的配置动态刷新:Spring Cloud Bus
    Java后端微服务架构下的配置动态刷新:SpringCloudBus大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,服务的配置管理是一个挑战,尤其是当配置需要动态更新时。SpringCloudBus提供了一种基于消息总线的配置刷新机制,允许配置更改在服务......
  • Java后端分布式系统的服务健康检查:Spring Boot Health
    Java后端分布式系统的服务健康检查:SpringBootHealth大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,服务的健康检查是确保服务可用性和稳定性的关键环节。SpringBootHealth提供了一种标准化的方式来检查和管理服务的健康状态。服......
  • Java后端微服务架构下的服务依赖注入:Spring Cloud Context
    Java后端微服务架构下的服务依赖注入:SpringCloudContext大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,服务间的依赖关系错综复杂,服务依赖注入是实现服务解耦和动态管理的关键技术。SpringCloudContext提供了一种机制,允许在Spring......