Java的泛型是什么呢, 就是类型的參数化,这得类型包含方法參数和返回值。也就是原本该是确定类型的地方换成了变量,把类型的确定时间向后延迟了。

在之前,学过“重载”的概念,重载是什么呢,举例来说

public class Test{
// 处理整型数据
void receive(int i) {
System.out.println("Received one int data");
System.out.println("i="+i);
}
// 处理浮点型数据
void receive(float f) {
System.out.println("Received one float data");
System.out.println("f="+f);
}
// 处理字符串数据
void receive(String s) {
System.out.println("Received a String");
System.out.println("s="+s);
} }

在上面的这个类里的三个方法中有同样的处理逻辑,仅仅有參数类型不同。方法调用时程序会依据參数的类型调用对应參数的方法,这就是參数重载,让类以统一的方式处理不同数据类型的手段。

那泛型和重载有什么联系呢?

泛型和重载从不同的角度处理了多种数据类型的问题。

泛型能够应用的更广泛,能够用于方法、接口、类。那么让我们看看怎样用泛型实现上面的Test类呢?

public class Test<T> {
void receive(T t) {
System.out.println("Received one "+t.getClass().getName()+" data");
System.out.println("t="+t);
} public static void main(String[] args){
Test<String> test=new Test<String>();
test.receive("abc"); Test<Integer> test1=new Test<Integer>();
test1.receive(1);
}
}

我们发如今泛型的应用中,我们用变量T取代了详细的类型參数。能够等到实际调用的时候在确定參数的类型,这样大大降低了代码的量,而且T能够是java中的不论什么类型(包含基本类型和对象类型)。事实上这里并没有什么新知识。仅仅是在函数的基础上。把传入数据和输出数据(返回值)的类型也參数化了。以下是一个方法的返回值也是用泛型的样例:

public class TestGenetic<K,V> {
public Hashtable<K,V> table=new Hashtable<K,V>(); public void put(K k,V v){
table.put(k, v);
} public V get(K k){
return table.get(k);
} public static void main(String[] arg){
TestGenetic<String,String> test=new TestGenetic<String,String>();
test.put("001", "abc");
test.put("002", "def");
String str=test.get("001");
System.out.print(str);
} }

当中get方法的返回值也使用了泛型,因此应用就更加的灵活了。当然,以上代码中用到的T。K。V都仅仅相当于变量名。用什么字母取代都能够。

Java基础:泛型的更多相关文章

  1. 一天一个Java基础——泛型

    这学期的新课——设计模式,由我仰慕已久的老师传授,可惜思维过快,第一节就被老师挑中上去敲代码,自此在心里烙下了阴影,都是Java基础欠下的债 这学期的新课——算法设计与分析,虽老师不爱与同学互动式的讲 ...

  2. Java 基础 -- 泛型、集合、IO、反射

    package com.java.map.test; import java.util.ArrayList; import java.util.Collection; import java.util ...

  3. java基础-泛型举例详解

    泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...

  4. Java基础 - 泛型详解

    2022-03-24 09:55:06 @GhostFace 泛型 什么是泛型? 来自博客 Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了&quo ...

  5. java基础-泛型3

    浏览以下内容前,请点击并阅读 声明 8 类型擦除 为实现泛型,java编译器进行如下操作进行类型擦除: 如果类型参数有限制则替换为限制的类型,如果没有则替换为Object类,变成普通的类,接口和方法. ...

  6. java基础 泛型

    泛型的存在,是为了使用不确定的类型. 为什么有泛型? 1. 为了提高安全 2. 提高代码的重用率 (自动 装箱,拆箱功能) 一切好处看代码: package test1; import java.la ...

  7. java基础-泛型2

    浏览以下内容前,请点击并阅读 声明 6 类型推测 java编译器能够检查所有的方法调用和对应的声明来决定类型的实参,即类型推测,类型的推测算法推测满足所有参数的最具体类型,如下例所示: //泛型方法的 ...

  8. java基础-泛型1

    浏览以下内容前,请点击并阅读 声明 泛型的使用能使类型名称作为类或者接口定义中的参数,就像一般的参数一样,使得定义的类型通用性更强. 泛型的优势: 编译具有严格的类型检查 java编译器对于泛型代码的 ...

  9. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  10. Java基础——泛型

    一.定义 泛型(generic)是指参数化类型的能力.可以定义带泛型类型的类或方法,随后编译器会用具体的类型来替换它(泛型实例化).使用泛型的主要优点是能够在编译时,而不是在运行时检测出错误.它是jd ...

随机推荐

  1. hdu1172猜数字(暴力枚举)

    猜数字 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. MD5加密算法(转)

    获取字符串的MD5摘要 原文更详细: http://www.weixuehao.com/archives/474 代码如下: import java.security.MessageDigest; p ...

  3. Struts2(二)——配置文件struts2.xml的编写

    接上一篇博客,这篇博客讲述一下2——9小标题的内容,这些问题都可以在struts2配置文件中设置(当然有的也可以在Struts.properties属性文件,web.xml中进行设置),而且常规开发中 ...

  4. Spring整合Quartz

    目录[-] 一.Spring创建JobDetail的两种方式 二.整合方式一示例步骤 1.将spring核心jar包.quartz.jar和Spring-context-support.jar导入类路 ...

  5. ng-cli

    angluar2 cli 是一个比较好的工具 .解决 Angular 2 环境设置是一大入门门槛,有22%的人说环境设置太过复杂.Angular CLI的诞生,正是为了解决这个问题. 1. 基本介绍 ...

  6. Error Correct System(模拟)

     Error Correct System Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

  7. “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛暨河南高校邀请赛-正式赛(总结)

    这次轻院校赛,我们去了五个队,怀着打酱油的心态早早爬起来坐上校车出发了,由于昨晚室友打游戏,以及看视频大笑...没睡好,快1点才睡着,感觉特别困,车上没地方,睡不着,就在车上闭目养神,由于在新校区,不 ...

  8. 关于map与set的一点理解;

    set代码: #include<stdio.h> #include<set> using namespace std; int main(){ set<int>m; ...

  9. error: ‘for’ loop initial declarations are only allowed in

    使用gcc,出现如下错误: thread_join.c:7:5: error: 'for' loop initial declarations are only allowed in C99 mode ...

  10. 面向对象3-this的用法

    1.当有定时器时 this会指向window <script type="text/javascript"> function Aaa(){ var _this=thi ...