java泛型:T与?的使用及区别
本文转载自https://blog.csdn.net/cris001cris/article/details/53712189
T表示泛型,new的时候要加入泛型,更方便通用
? 表示不确定的类型,一般用在通配
Object表示java中所有类的父类,在集合中使用时要格外注意。
jdk为了便于理解,用K表示键,V表示值,T表示type类型,E表示enum枚举,其实这四个都只是符号,都是表示泛型名称。换成其他字母都没关系,但是都要在之前声明。
下面介绍一个例子:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;//虽然Test<T1,T2>,但类名字仍为Test。T1,T2只是告诉我们new的时候要加入泛型,更方便通用
//T1,T2可以任意定义,比如改成K,V都可以
//他们不会关联到其他类,只是在本类中通用
public class Test<T1, T2> {public static void main(String[] args) {System.out.println(new Test().getT1());System.out.println(new Test().getT2());new Test<String, String>().getClassName("");//T1,T2在new的时候用到,这里都为Stringnew Test().getClassAndList(Integer.class);//HashMap的括号里面不能是T,E,T1,T2等不确定的东西,但可以是?HashMap<?, ?> map = new HashMap<Object, String>();List<?> list = new ArrayList<String>();}public T1 getT1() {//这里的“T1”替换成1或1.0都会报错return (T1) "T1";}T2 getT2() {//将自动转型为Stringreturn (T2) "T2";}public <T> void getClassName(T x) {//<T>必须放在void或者返回类型的前面System.out.println(x.getClass().getName());}public <T> Class<?> getClassAndList(Class<?> a) {//Class<T>前面缺少<T>必须定义,否则将出现编译错误//T改成其他字母都可以,但一定要声明// 返回类型和参数中的类型:Class<T>和Class<?>都可以。因为返回的a的类型为Class<T>,Class<?>可以通配//当两个都是Class<?>,参数中的?自动通配成TSystem.out.println(a.getClass().getName());//传入的a是一个类,Class类型//参数里面的Class<T>最大的好处是如果方法里面定义了泛型,可以自动获取类型值,比如如下的List<T>可以自动获取到a的类型,不必强调死List<?> aa = new ArrayList<T>();//List<?> aa = new ArrayList<?>();会报错,以为ArrayList必须是一种类型,List<>起到通配的作用//List<T> aa = new ArrayList<T>();当然正确System.out.println(aa);return a;}
}
java泛型:T与?的使用及区别相关推荐
- Java泛型中extends和super的区别?
区别 <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概 ...
- java泛型中?和T有什么区别?
2019独角兽企业重金招聘Python工程师标准>>> public static void printColl(ArrayList<?> al){ ...
- 【Java】泛型中 extends 和 super 的区别?
<? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...
- java 泛型 class t_java 泛型中classT 和T的区别是什么?
public boolean edit(T entity) 和public T get(Class c, Serializable id)中这两种参数的定义和调用有什么区别? public boole ...
- [转]JAVA泛型通配符T,E,K,V区别,T以及ClassT,Class?的区别
原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...
- Java泛型中extends T和super T的区别?
<? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...
- 不正确 有三种形式 说法 通配泛型_一看就懂 详解JAVA泛型通配符T,E,K,V区别...
1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...
- (转)JAVA泛型通配符T,E,K,V区别,T以及Class,Class的区别
1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...
- java super extend 区别_Java泛型中extends和super的区别
extends T>和 super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. extends T&g ...
- JAVA泛型通配符T,E,K,V区别,T以及ClassT,ClassT的区别
原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...
最新文章
- JSon数据查询---Jlinq
- JavaScript 把字符串类型转换成日期类型
- java的调试工具_[Java教程]chrome调试工具
- 面向过程的ado建造者模式
- axis2 webservice入门学识(JS,Java,PHP调用实例源码)
- 小学音乐教学和计算机的融合,小学学科教学与计算机深度融合赛课心得体会(共4篇)...
- 0004-程序流程2之ui-router大意
- C# Base64方式的编码与解码
- HDU 3651 A Simple Problem
- JavaScript 引擎 V8 新机制:JIT-less
- Linux父进程如何发信号给子进程,关于C#:fork和signal:如何将信号从父进程发送到特定的子进程...
- Hive窗口函数应用:级联累加求和场景
- 根据原图和对应的alpha图提取前景并且合成新图(基于python+opencv)
- OpenGLCG技术之Render To Texture
- simulink电子节气门控制模型发动机电子节气门控制模型,有说明文档,教程。
- 北邮大一第二学期计算机学院课表,北京邮电大学
- 电子电工技术------电阻元件,电感元件与电容元件
- 安卓智能地图开发与实施:三维地图 - ArcGIS Runtime SDK for Android
- 基于java的高校运动会管理系统的设计与实现--毕业论文(可仅作参考)
- leetcode刷题第21天——1763,117,572