一篇文章带你了解java泛型--泛型类,泛型方法,泛型接口

目录
  • Java 泛型
    • Java 泛型是什么
    • 泛型类
      • 泛型类的格式
      • 泛型类举例
    • 泛型方法
      • 泛型方法的格式
      • 泛型方法举例
    • 泛型接口
      • 泛型接口的格式
      • 泛型接口举例
      • 泛型接口实现类:
      • 测试接口类:
      • 打印结果:
  • 总结

Java 泛型

Java 泛型是什么

官方定义:

泛型是Java SE 1.5的新特性,泛型的本质就是参数化类型,也就是说所操作的数据类型被指定为一个参数

这种参数类型可以用在类、接口和方法的创建中,分别成为泛型类、泛型接口、泛型方法

优缺点:

​ 优点:可以不用再类型转换了

​ 缺点:降低了代码的可读性

泛型类

泛型类:当一个类要操作的引用数据类型不确定的时候,可以给该类定义一个形参,用到这个类的时候,通过传递类型参数的形式,来确定要操作的具体的对象类型。在JDK1.5之前,为了提高代码的通用性,通常把类型定义为所有类的父类型:Object,这样做有两大弊端:1、在具体操作的时候要进行强制类型转换;2、这样还是指定了类型,还是不灵活,对具体类型的方法未知且不安全

泛型类的格式

泛型类的格式:在类名后面声明类型变量,泛型类可以有多个类型变量

如:

public class Myname <K,V>

什么时候使用泛型类:只要类中操作的引用数据类型不确定,就可以定义泛型类。通过使用泛型类,可以省去强制类型转换的类型转换异常的麻烦

泛型类举例

泛型类:

public class FanXingLei<T> {
	public T getE(T t)
	{
		return t;
	}
}

学生类:

public class Student {
public String name;
public int age;

public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public Student(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}
@Override
public String toString() {
	return "Student [name=" + name + ", age=" + age + "]";
}
}

教师类:

public class Teacher {

public String name;
public int age;
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public Teacher(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}
@Override
public String toString() {
	return "Teacher [name=" + name + ", age=" + age + "]";
}
}

测试类:

public static void main(String[] args) {
		FanXingLei<Student> stu=new FanXingLei<Student>();

		Student student=new Student("小明", 20);
		Teacher teacher=new Teacher("小红", 27);
		FanXingLei<Teacher> tu=new FanXingLei<Teacher>();
		System.out.println(stu.getE(student).getClass().getName());
		System.out.println(tu.getE(teacher).getClass().getName());

		System.out.println(stu.getE(student).toString());
		System.out.println(tu.getE(teacher).toString());
	}
}

打印结果:

rj.cd.Fx01.Student
rj.cd.Fx01.Teacher
Student [name=小明, age=20]
Teacher [name=小红, age=27]

泛型方法

目的:泛型方法也是为了调高代码的重用性和程序安全性。编程原则:尽量设计泛型方法解决问题,如果设计泛型方法可以取代泛型整个类,应该采用泛型方法(如果泛型方法可以搞定就不建议使用泛型类)。

泛型方法的格式

泛型方法的格式:类型变量放在修饰符后面和返回类型前面,如:

public static <E> E getMax(T...in)   //三个点表示为多个参数

泛型方法举例

public class Test {
	public static void main(String[] args) {
		print("你好");
		print(200);
		print(true);
		print(99.9);
}

public static <T> void print(T t) {
	System.out.println(t);
}
}

打印结果:

你好
200
true
99.9

泛型接口

将泛型原理用于接口实现中,就是泛型接口。

泛型接口的格式

泛型接口的格式:泛型接口格式类似于泛型类的格式,接口中的方法的格式类似于泛型方法的格式

public interface IFanXingJieKou<T>

泛型接口举例

泛型接口类:

public interface IFanXingJieKou <T> {
	public T read(T t);
}

泛型接口实现类:

public class FanXingImpl implements IFanXingJieKou<String> {
	@Override
	public String read(String t) {
		return t;
	}
}

测试接口类:

public class Test {
	public static void main(String[] args) {
		IFanXingJieKou<String> fK=new FanXingImpl();
		System.out.println(fK.read("hello"));
	}
}

打印结果:

hello

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • java中的基础运算符

    目录 一.算术运算符 二.关系运算符 三.位运算和逻辑运算符 四.赋值运算符 一.算术运算符 算术运算符的作用和在数学中的作用一样,主要的算术运算符有以下几种 1.+加 2.-减 3.*乘 4./除 5.%取余 其中加.减.乘.除的用法同数学中的相同,不过需要注意的是 / 和 % 的区别:两个数据做除法,/取结果的商,%取结果的余数.除了这五种还有以下两种: ++自增:变量的值加1 – 自减:变量的值减1 使用时需要注意以下几点: ​ 1.++和-- 既可以放在变量的后边,也可以放在变量的前边.

  • Java之Swagger配置扫描接口以及开关案例讲解

    1. Swagger--配置扫描接口及开关 1.1 配置扫描接口 SwaggerConfig.java /** * 配置docket以配置Swagger具体参数 */ @Bean public Docket docket() { /* * 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口 * basePackage(final String basePackage) // 根据包路径扫描接口(最常用) * any() 扫描所有,项目中的所

  • java并发之Lock接口的深入讲解

    目录 Juc中各种各样锁信息 synchronized面临缺点 Lock接口 对比 Lock和tryLock的区别 总结 Juc中各种各样锁信息 在java的juc包为我们提供了各种各样的锁信息.如果细心来看其大部分都会实现一个名为LOCK的接口信息本文皆在帮你回顾Lock信息: 通过本文你将了解到如下内容: 1.Lock和synchronized的对比 2.Lock中常见API的总结 synchronized面临缺点 锁的出现主要是为了保证在并发访问共享资源时不出现错. 在java中如果不考虑

  • 一篇文章带你了解Java基础-抽象

    目录 Java基础知识(抽象) 抽象 抽象定义 abstract的使用 定义抽象类 抽象类的一些注意点 总结 Java基础知识(抽象) 抽象 抽象是从众多的事物中抽取出共同的.本质性的特征,而舍弃其非本质的特征的过程.具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精.去伪存真.由此及彼.由表及里的加工制作,形成概念.判断.推理等思维形式,以反映事物的本质和规律的方法. 抽象定义 在继承过程中,我们知道父类的方法可以子类进行重写,而每个子类各自的实现都不尽相同.就好比动物都有吃

  • 一篇文章带你了解Java基础-接口

    目录 Java基础知识(接口) 接口 接口的定义 接口和抽象的区别 接口的格式 接口中的主要成分 接口的案例 接口与接口的关系 JDK 8之后的接口新增方法 总结 Java基础知识(接口) 接口 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口的定义 接口: 在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口

  • 一篇文章带你了解java泛型--泛型类,泛型方法,泛型接口

    目录 Java 泛型 Java 泛型是什么 泛型类 泛型类的格式 泛型类举例 泛型方法 泛型方法的格式 泛型方法举例 泛型接口 泛型接口的格式 泛型接口举例 泛型接口实现类: 测试接口类: 打印结果: 总结 Java 泛型 Java 泛型是什么 官方定义: 泛型是Java SE 1.5的新特性,泛型的本质就是参数化类型,也就是说所操作的数据类型被指定为一个参数 这种参数类型可以用在类.接口和方法的创建中,分别成为泛型类.泛型接口.泛型方法 优缺点: ​ 优点:可以不用再类型转换了 ​ 缺点:降低

  • 一篇文章带你入门java泛型

    目录 一.什么是泛型 二.语法 三.示例 1.简单示例 2.返回最大值-支持各种数据类型 3.泛型类 4.类型通配符 总结 一.什么是泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 二.语法 你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数.根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用. 下面是定

  • 一篇文章带你了解Java泛型的super和extends

    目录 概念简单理解 代码样例解读 关于List<? super T> add方面 返回值方面 关于List<? extendsT> add方面 返回值方面 总结 概念简单理解 List<? extends T>表示该集合中存在的都是类型T的子类,包括T自己 List<? super T>表示该集合中存的都是类型T的父类,包括T自己 代码样例解读 父子类代码: /** * 生物 */ static class Biological{ } /** * 动物 */

  • 一篇文章带你了解Java Spring基础与IOC

    目录 About Spring About IOC Hello Spring Hello.java Beans.xml Test.java IOC创建对象的几种方式 Spring import settings Dependency Injection 1.构造器注入 2.set注入 3.拓展注入 P-namespcae&C-namespace Bean scopes singleton prototype Bean的自动装配 byName autowire byType autowire 小结

  • 一篇文章带你了解Java中ThreadPool线程池

    目录 ThreadPool 线程池的优势 线程池的特点 1 线程池的方法 (1) newFixedThreadPool (2) newSingleThreadExecutor (3) newScheduledThreadPool (4) newCachedThreadPool 2 线程池底层原理 3 线程池策略及分析 拒绝策略 如何设置maximumPoolSize大小 ThreadPool 线程池的优势 线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些

  • 一篇文章带你了解JAVA面对对象应用

    目录 常用API String类 关于String为啥不可改变 StringBuilder类 String.StringBuffer 和 StringBuilder 的区别: ArrayList 1.1ArrayList类概述 1.2ArrayList类常用方法 学生管理系统 总结 常用API API理解 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将

  • 一篇文章带你了解Java容器,面板及四大布局管理器应用

    目录 什么是容器? 什么是面板? JPanel面板 JScrollPane面板 什么是布局管理器? 绝对布局管理器 流布局管理器 边界布局管理 网格布局管理器 容器.面板.布局管理器之间的关系 总结 什么是容器? 在Java的GUI界面设计中,关于容器的理解,从字面意思我们就可以认为它是存放控件的地方,而这个地方依托在窗体之上,常用的容器是container. 而关于container容器我们应该有这样的认识:Swing组件中的窗体通常是与容器相关联的,所以在一般情况下,建立完JFrame窗体后

  • 一篇文章带你入门java面向对象

    目录 一.继承 示例: 二.重载 三.接口 1.接口与类相似点: 2.接口与类的区别: 3.语法 四.枚举 1.定义 2.迭代枚举元素 3.在 switch 中使用枚举类 总结 一.继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为 本章就以人.学生.老师作为例子.学生和老师都继承人这个对象,都有人的特征和行为,人就是父类,老师和学生就是子类 示例: 人类: package com.zhouzy.base.t7;

  • 一篇文章带你入门Java修饰符

    目录 定义 分类 访问控制修饰符 非访问控制修饰符 修饰符的使用说明 修饰类 修饰方法 访问控制修饰符 非访问控制修饰符 修饰变量 总结 定义 Java修饰符:修饰符用来定义类.方法或者变量,通常放在语句的最前端. 分类 主要分为2类: 访问控制修饰符 非访问控制修饰符 访问控制修饰符 可以使用访问控制符来保护对类.变量.方法和构造方法的访问.分为以下4中权限:private,default,protected,public. 权限说明: 修饰符 当前类 同包 子类(不同包) 不同包(其他类)

  • 一篇文章带你了解JAVA面对对象之继承与修饰符

    目录 Java面向对象之继承与修饰符 继承 1.含义 2.实现 3.好处 4.短处 5.成员变量的访问特点 7.继承中结构方法的访问特点 8.方法重写 9.java继承的注意事项 修饰符 1.package 2.import 3.权限修饰符 4.final 5.ianl修饰基本数据类型变量 6.final修饰引用数据类型变量 7.static 8.static访问的特点 总结 Java面向对象之继承与修饰符 继承 1.含义 继承是面向对象三大特征之一,能使子类具有父类的属性和方法,还可以在子类中

随机推荐