- 浏览: 633220 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (820)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (10)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);
泛型类:
T是一个泛型类
我们可以看到T是一个不确定的类。我们在声明、实例化Gen的时候,可以使用:
Gen<String> gen1=new Gen<String>("");
Gen<Integer>gen2=new Gen<Integer>(1);
这样即方便地忽略了T的类型,不需要为gen来设置定义多种参数。
再看如下代码,对Gen进行改造,看看extends的用法
声明、实例化该Gen
可以看到,Object并不是Comparable的子类,出现了错误,即是说,我们为K加入了一个限定“K必须为Comparable的子类”
继续改造Gen,看看super的用法
声明实例化该Gen
可以看到,String虽然实现自Comparable,但它并不是Double或者Double的父类。
所以也报错了。
看了上面的《Java泛型》,再来学习泛型方法就容易了。
代码如下:
首先,泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。
然后,和泛型类一样,可以声明多个泛型,用逗号隔开。
先看看效果,调用display
/**
* 泛型方法测试
*/
GenMethod.display(123);
GenMethod.display("");
GenMethod.display(123f);
结果为:
class java.lang.Integer
class java.lang.String
class java.lang.Float
参考:http://www.cnblogs.com/anrainie/archive/2012/03/09/2387177.html
http://www.cnblogs.com/anrainie/archive/2012/03/09/2387272.html
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);
泛型类:
T是一个泛型类
package generic; public class Gen<T> { private T t; public Gen(T t) { this.t = t; } public T getT() { return t; } public void setT(T t) { this.t = t; } }
我们可以看到T是一个不确定的类。我们在声明、实例化Gen的时候,可以使用:
Gen<String> gen1=new Gen<String>("");
Gen<Integer>gen2=new Gen<Integer>(1);
这样即方便地忽略了T的类型,不需要为gen来设置定义多种参数。
再看如下代码,对Gen进行改造,看看extends的用法
package generic; public class Gen<T, K extends Comparable<?>> { private T t; private K k; public K getK() { return k; } public void setK(K k) { this.k = k; } public Gen(T t) { this.t = t; } public Gen(T t, K k) { this.t = t; this.k = k; } public T getT() { return t; } public void setT(T t) { this.t = t; } }
声明、实例化该Gen
可以看到,Object并不是Comparable的子类,出现了错误,即是说,我们为K加入了一个限定“K必须为Comparable的子类”
继续改造Gen,看看super的用法
package generic; public class Gen<T, K extends Comparable<? super Double>> { private T t; private K k; public K getK() { return k; } public void setK(K k) { this.k = k; } public Gen(T t) { this.t = t; } public Gen(T t, K k) { this.t = t; this.k = k; } public T getT() { return t; } public void setT(T t) { this.t = t; } }
声明实例化该Gen
可以看到,String虽然实现自Comparable,但它并不是Double或者Double的父类。
所以也报错了。
看了上面的《Java泛型》,再来学习泛型方法就容易了。
代码如下:
package generic; /** * 泛型方法测试 * * @author caiyu * */ public class GenMethod { public static <T> void display(T t) { System.out.println(t.getClass()); } }
首先,泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。
然后,和泛型类一样,可以声明多个泛型,用逗号隔开。
先看看效果,调用display
/**
* 泛型方法测试
*/
GenMethod.display(123);
GenMethod.display("");
GenMethod.display(123f);
结果为:
class java.lang.Integer
class java.lang.String
class java.lang.Float
参考:http://www.cnblogs.com/anrainie/archive/2012/03/09/2387177.html
http://www.cnblogs.com/anrainie/archive/2012/03/09/2387272.html
发表评论
-
BigDecimal/Long 前后端交互失去精度解决方法
2024-01-22 10:31 413BigDecimal/Long 前后端交互失去精度解决方法 ... -
在Java 8中可以通过下面的方式获取Map对象的第一个元素
2023-12-18 13:48 357Java 8中如何获取Map对象的第一个元素 -
用EXCEL批量生成INSERT语句
2023-03-18 11:19 739用EXCEL批量生成INSERT语句 -
使用Java访问FTP文件时再次调用方法client.retrieveFileStream(ftpFile)会返回null的问题
2023-01-07 21:50 766使用Java访问FTP文件时再次调用方法client.retr ... -
java获取本月最后一天
2022-12-28 08:29 2395java获取本月第一天或者最后一天方法 @Test ... -
www
2022-11-12 09:03 0public void saveTransScheduleBi ... -
Notepad++删除代码中的注释,可删除//单行注释和/**/多行注释
2022-10-20 14:17 797Notepad++删除代码中的注释,可删除//单行注释和/** ... -
接口限流算法有哪些
2022-05-05 23:27 249接口限流的几种算法 接口限流算法有哪些? nginx限流方案 ... -
CompletableFuture学习记录
2022-04-25 18:00 244CompletableFuture学习记录 -
java单例模式几种实现方式
2022-04-18 11:48 255java单例模式几种实现方式 -
临时的几个网站
2022-03-31 13:33 267https://www.cnblogs.com/chengxu ... -
Java Stream - 如何filter带谓词
2022-03-23 23:53 248Java Stream Java Lambda语法 J ... -
URLConnection的连接、超时、关闭用法总结
2022-03-08 17:23 571URLConnection的连接、超时、关闭用法总结 jav ... -
关于java中的this::
2022-02-26 23:07 220关于java中的this:: -
StringRedisTemplate和RedisTemplate的区别和选择
2022-02-10 23:05 259StringRedisTemplate和RedisTempla ... -
ForkJoinPool初略分析
2022-02-10 11:44 285ForkJoinPool初略分析 多线程 ForkJoin ... -
service中@NotNull的使用
2022-01-23 13:48 1517@Validated和@NotNull加到什么上面,接口还是 ... -
Java8 Collectors.toMap的两个大坑
2022-01-21 15:54 324Java8 Collectors.toMap的两个大坑 -
踩坑之SimpleAsyncTaskExecutor
2022-01-13 20:50 826踩坑之SimpleAsyncTaskExecutor Sp ... -
都在建议你不要直接使用 @Async 注解
2022-01-10 11:54 777引用如果不自定义异步方法的线程池默认使用SimpleAsync ...
相关推荐
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...
Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
综上所述,虽然Java泛型在编译后会进行类型擦除,但通过上述技巧,我们仍然能够在运行时获得关于泛型类实例化类型的一些信息。在实际开发中,这些方法可以帮助我们编写更加灵活和安全的代码。在示例文件`GenericRTTI...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入。这个特性极大地提高了代码的类型安全性和可读性,减少了在运行时出现ClassCastException的可能性。SUN公司的Java泛型编程文档,包括...
下面我们将详细探讨Java泛型接口的相关知识点。 1. **泛型接口的定义** 泛型接口的定义方式与普通接口类似,只是在接口名之后添加了尖括号`<T>`,其中`T`是一个类型参数,代表某种未知的数据类型。例如: ```java...
下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...
Java 泛型是一种强大的工具,它允许我们在编程时指定变量的类型,提供了编译时的类型安全。然而,Java 的泛型在运行时是被擦除的,这意味着在运行时刻,所有的泛型类型信息都会丢失,无法直接用来创建对象或进行类型...
Java泛型是Java编程语言中的一个强大特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。这使得代码更加安全、可读性更强,并且能够减少类型转换的必要。在“java泛型的内部原理及更深应用”这个...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
"Java 泛型学习" Java 泛型是 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的...
Java 泛型使用详细分析 Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...