泛型的使用和作用

article/2025/6/20 15:13:21

概述

在这里插入图片描述

泛型的使用

在这里插入图片描述

多态与泛型

在这里插入图片描述
两者要一致,Animal 和cat要一致

泛型的作用

  1. 提高 Java 程序的类型安全
    通过前面的学习我们知道, 在集合中可以添加 Object 类型的对象, 如果在不使用泛型的情况下定义了一个 ArrayList 对象, 那 么各种类的对象都可以添加到该集合中。 而在从集合中取值时, 都需要进行强制类型转换, 可以把取出的对象转换成任意类 型, 但是编译时不报错, 但是运行时会发生 ClassCastException 异常。 因此, 使用泛型可以使编译器知道集合的类型限制, 在编译期如果添加不同类型的数据就能发现错误。

  2. 消除强制类型转换
    泛型可以消除源代码中的许多强制类型转换, 这样可以使代码可读性更好, 并减少出错的机会

泛型作为方法参数

在这里插入图片描述
Book类

public class Book  extends Goods{@Overridepublic void sell() {System.out.println("sell books");}
}

Clothes类

public class Clothes extends Goods {@Overridepublic void sell() {System.out.println("sell books");}
}

Goods类

public abstract class Goods {public abstract void sell();
}
public class GoodsTest {public static void main(String[] args) {List<Book> books=new ArrayList<Book>();books.add(new Book());books.add(new Book());//定义服装ArrayList<Clothes> clothes = new ArrayList<>();clothes.add(new Clothes());clothes.add(new Clothes());GoodsSeller goodsSeller = new GoodsSeller();goodsSeller.sellGood(books);goodsSeller.sellGood(clothes);}
}

该程序的运行结果如下所示

sell books
sell books
sell books
sell books

这里要注意的是,需要
在这里插入图片描述
在遍历方法出使用? extends泛型方法,不然在测试类中无法将Book等继承类传入sellGood

自定义泛型类

将平常使用的泛型<>括号里面的数据类型变为T
理解
就是定义类时,暂时不定义数据类型用T替代,需要用到实例对象的时候,传入具体数据类型

public class NumGeneric<T> {private T num;public T getNum() {return num;}public void setNum(T num) {this.num = num;}public static void main(String[] args) {NumGeneric<Integer> obj = new NumGeneric<>();obj.setNum(100);System.out.println("所传入数据为:"+obj.getNum());}
}

该程序的运行结果如下所示

所传入数据为:100

使用方法2:传入两个自定义数据类型

例2

public class NumGeneric<T,X> {private T num1;private X num2;public void getNum (T num1,X num2) {this.num1 = num1;this.num2 = num2;}public T getNum1() {return num1;}public void setNum1(T num1) {this.num1 = num1;}public X getNum2() {return num2;}public void setNum2(X num2) {this.num2 = num2;}public static void main(String[] args) {NumGeneric<Integer,Float> obj = new NumGeneric<>();obj.getNum(123,12f);System.out.println("所输入数据为"+obj.getNum1());System.out.println("所输入数据为"+obj.getNum2());}
}

该程序的运行结果如下所示

所输入数据为123
所输入数据为12.0

自定义泛型方法

设置方式

使用方式在修饰符和返回值之间添加

public class GenericMethod {public<T >void printValue(T t){System.out.println(t);}public static void main(String[] args) {GenericMethod genericMethod = new GenericMethod();genericMethod.printValue("123");genericMethod.printValue(123);}
}

该程序的运行结果如下所示

123
123

联系之前做题
这边也可以对泛型进行限制

public<T extends Number>void printValue(T t)

其调用时传入参数只能为数值型


http://chatgpt.dhexx.cn/article/AdwwxjJN.shtml

相关文章

java泛型(java泛型的作用)

java泛型的基本使用是什么&#xff1f; add("test1"); String test1 (String)strList。get(0); System。out。println("Test 1 : " test1); } public void testGeneric() { List strList new ArrayList(); strList。 Java泛型的规则和限制有哪些呢&…

java泛型的作用及实现原理

一、泛型的介绍 泛型是Java 1.5的新特性&#xff0c;泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中&#xff0c;分别称为泛型类、泛型接口、泛型方法。 Java泛型被引入的好处是安全简单。在Java …

泛型(一)--泛型的作用和定义

一、泛型的作用 泛型是.net中十分常见的一种特性。它是在.net 2.0的时候加入。那为什么要在.net 2.0的时候加入泛型这个特性呢&#xff1f;我们首先来看一段代码。 using System;namespace 泛型{class Program{static void Main(string[] args){int iParameter 1;string sPar…

什么叫泛型?有什么作用?

作者&#xff1a;Java3y 链接&#xff1a;https://www.zhihu.com/question/272185241/answer/366129174 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 一、什么是泛型&#xff1f; Java泛型设计原则&#xff1a;…

Java泛型的作用及优点有哪些

Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 作用 第一是泛化。可以用T代表任意类型Java语言中引入泛型是一个较大的功能增强不…

第十章 泛型

10.1 泛型的理解和好处 10.1.1使用传统方法的问题分析 1&#xff09;不能加入到集合ArrayList中的数据类型进行约束(不安全) 2&#xff09;遍历的时候&#xff0c;需要进行类型转换&#xff0c;如果集合中的数据量较大&#xff0c;对效率有影响 10.1.2泛型的好处 1)编译时…

简述泛型的基本使用和作用

前言 在上一篇文章中&#xff0c;给大家讲解了泛型的概念、作用、使用场景&#xff0c;以及泛型集合、泛型接口和泛型类的用法&#xff0c;但受限于篇幅&#xff0c;并没有把泛型的内容讲解完毕。所以今天我们会继续学习泛型方法、泛型擦除&#xff0c;以及通配符等的内容&…

军职在线大学计算机基础(自主模式),《军职在线》中国哲学经典著作导读(自主模式)...

《军职在线》中国哲学经典着作导读(自主模式) 1《周易》导读 测试题C A C B D C D B B D D A B C D C D B A B 2《道德经》导读 测试题D C D C C C D A D C D B C C C A B A A B 3《庄子》导读 测试题D C D A A C B A A C A A C A D C B 4《论语》导读 测试题B B C ED B A A A …

台湾国立大学(林轩田)《机器学习技法》(第7讲)blending and bagging

课程地址&#xff1a;https://class.coursera.org/ntumlone-001/class 课件讲义&#xff1a;http://download.csdn.net/download/malele4th/10212756 注明&#xff1a;文中图片来自《机器学习技法》课程和部分博客 建议&#xff1a;建议读者学习林轩田老师原课程&#xff0c…

大学有新民之道,则大学生者负新民工作之实际责任者也。

梅贻琦&#xff0c;&#xff08;1889-1962&#xff09;&#xff0c;字月涵&#xff0c;为梅曾臣长子。自1914年由美国吴士脱大学学成归国&#xff0c;即到清华担任教学和教务长等多种职务。1931年&#xff0c;梅贻琦出任清华校长&#xff0c;自此后一直到他在台湾去世&#xff…

【转载】中庸与技术书

2019独角兽企业重金招聘Python工程师标准>>> 转自&#xff1a;图灵社区 原文作者&#xff1a;刘祺 原文地址&#xff1a;http://www.ituring.com.cn/article/213657 本次转载已经过原作者同意&#xff0c;二次转载请自行联系原作者 #中庸与技术书 在我写这篇文章之前…

《大学》《中庸》全文及翻译 (转载)

《大学》全文及翻译 原文&#xff1a; 大学之道&#xff0c;在明明德&#xff0c;在亲民&#xff0c;在止于至善。知止而后有定&#xff0c;定而后能静&#xff0c;静而后能安&#xff0c;安而后能虑&#xff0c;虑而后能得。物有本末&#xff0c;事有终始&#xff0c;知所先后…

[C语言]求一个数是否是2的n次方

设a8&#xff0c;a的二进制数为1000&#xff0c;若为16&#xff0c;则是 0001 0000&#xff0c;2的n次方转为二进制则只保留一个 1 &#xff0c; 其余位置全是0&#xff0c;因此只要判断这个数的二进制是否只有一个 1 &#xff0c;则知道这个数是否是2的n次方。 //求一个数是…

C语言|s1-s0|<=10的-6次方

#include <stdio.h> #include <math.h> double fun(double x) { double s11.0,s00.0; double t1.0; int n1; do { s0s1;//此时s0为s1的上一项 tt*(0.5-n1)*x/n; s1s1t; n; } while(fabs(s1-s0)>1e…

c语言字母能乘10吗,c语言编程中表示a乘以10的n次幂怎么表示

可以参考下面的代码&#xff1a; #include int main() { float a,s,n; sa*mi(10,n); return 0; } float mi(float x,int y) { float a; int i; a1; if(y>0) { for(i1;i<y;i) { aa*x; } } else { for(i-1;i>y;i--) { aa/x; } } return a; } 扩展资料&#xff1a; C语言…

c语言学习-编写函数求x的n次方的值

编写函数求x的n次方的值 程序流程图&#xff1a; 代码&#xff1a; #include<stdio.h> long mul(int j ,int k) { int i; long mu1; for(i0;i<k;i) mumu*j; return mu; } void main() { int x,n; long m; printf("please enter x\tn\t"); scanf("%…

c语言x的n次方怎么写_C语言入门教程(三)进制与操作符

Hello,小伙伴们大家好,今天开始进入C语言第三课时的学习。进入今天正式内容之前呢,先来看一下上次课程中的留下的一道练习题。 练习: 1.编写程序计算半径为任意浮点数的圆周长并把结果打印在屏幕上 1、进制 一个字节分成八段,每段只能记录一个0或者1要想把一个数字记录在一…

c语言n次方怎么输入_C语言中10个经典的算法,学会它,利用它

C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。 接下来我们先来看10道: (1) 输出9*9乘法口诀 运行结果: (2…

c语言编程如何进行n次方运算,c语言n次方怎么输入?_后端开发

python编程如何求2000到2500闰年&#xff1f;_后端开发 python编程求2000到2500闰年的方法&#xff1a;首先定义年份【i2000】&#xff1b;然后用while循环判断是否在2500内&#xff1b;接着若年份可被40整除且不被100整除&#xff0c;则是闰年&#xff0c;若年份可被400整除&a…

C语言怎么编辑次方,c语言怎么表示一个数的n次方

2009-01-05 C语言问题从键盘输入8个数,用选择法按由大到小的循序排列并输出,要求用指针来实现。 你应该自己实现这个小程序。 例子,单向链表排序(冒泡): struct student {int num; struct student *next; } struct student *paixu(struct student *head) {struct student *p,…