java 声明多个泛型类型和通配符】的更多相关文章

若一个类中多个字段需要不同的泛型声明,则在声明类的时候指定多个泛型类型即可: 格式: public interface IDAO<PK, T> { PK add(T t); void remove(PK id); void update(PK id, T t); T get(PK id); } 在进行引用传递的时候泛型类型必须匹配才可以传递,否则编译不通过: 使用? ,表示未知类型的泛型对象: List<?> 表示未知元素的List集合: 这种带通配符的List仅表示各种泛型Lis…
泛型方法 泛型方法定义规则: 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前. 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开.一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符. 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符. 泛型方法体的声明和其他方法一样.注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等) 泛型方法举例: public <T…
类型参数 泛型有三种实现方式,分别是泛型接口.泛型类.泛型方法,下面通过泛型方法来介绍什么是类型参数. 泛型方法声明方式:访问修饰符 <T,K,S...> 返回类型 方法名(方法参数){方法体} 一.访问修饰符与返回类型中间有个<T,K,S...>,T.K.S等属于类型参数,可以随便定义. 二.返回类型和方法参数可以是或者包含类型参数T.K.S等. 三.可以限定类型参数必须实现某些接口或者继承某个类,多个限定的类.接口中间用&分隔,类必须放在限定列表中所有接口的前面. 四.…
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list = new ArrayList(); 5 list.add("qqyumidi"); 6 list.add("corn"); 7 list.add(100); 8 9 for (int i = 0; i < lis…
个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.泛型在集合中的使用 1.1 在集合中使用泛型之前的例子 ​ 为什么要有泛型(Generic)? 1. 解决元素存储的安全性问题2. 解决获取数据元素时,需要类型强转的问题 ​ ​ 1.2 在集合中使用泛型例子1 List<String> list = new ArrayList<String>(); list.add("aaaa"); List<Intege…
从php这种弱类型的语言转到java,每次看到这种声明,一下子转不过弯来,总感觉很违和,最近思考了一下,有了点感悟 FileInputStream fileInputStream = new FileInputStream("C;\\java\\test.txt"); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"GBK"); BufferedReader b…
有许多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类. 泛型类 容器类应该算得上最具重用性的类库之一.先来看一个没有泛型的情况下的容器类如何定义: public class Container { private String key; private String value; public Container(String k, String v) { key = k; value = v; } public String getKey() { return key; }…
1.代码分段 当一个方法内部的代码超过7行时,就要考虑分成段落. 使用空行分隔代码 按照代码的功能进行分段 最终效果是一眼就能在宏观上把握代码的结构 (1)举例 Card 分成2段 第一段:定义变量保存数据 第二段:打印数据,实现功能 (2)分形 分形是自然界和人类社会普遍存在的现象 分形的意思是整体结构和细节结构是相似的 如河流主干好.与它支流是相似的 如叶脉的主干和分支是相似的 人类社会公路网.互联网都是分形的   我们写的代码一样有分形结构 (3)Card实例分段后 上面是数据 下面是功能…
其实是支持的: JDK6支持java -cp后面跟通配符'*',试了一下发现还是需要注意: 错误方式(Wrong way): java  -cp /data/apps/lib/*.jar com.chinacache.Main 或者 java  -cp /data/apps/ilb/ com.chinacache.Main 正确方式(right way): java -cp /data/apps/ilb/* com.chinacache.Main 低版本JDK(小于JDK6) java -cp…
JMM内存模型和JVM内存结构 JAVA内存模型(Java Memory Model) Java内存模型,一般指的是JDK 5 开始使用的新的内存模型,主要由JSR-133: JavaTM Memory Model and Thread Specification 描述. JMM就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范. 内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程…
在java 6之前,如果我们的应用依赖多个jar包,通常是将所有jar包文件枚举设置到环境变量CLASSPATH或者命令行参数-classpath(-cp)中.通常我们需要写一段shell脚本实现该功能.这种方式带来的问题是命令行较长.另外在windows平台下命令行的长度是有限制(http://support.microsoft.com/kb/830473/en-us)的,这导致各种奇怪的解决方案(比如缩短jar包名称.自己实现classloader等). 从java 6开始,我们可以在CLA…
数组的声明: int []a[] = new int[4][];//是正确的 int[] array = new int[2]{1,2};//是错误的 数组的长度是不可改变的,不能通过任何方式改变大小,除非重新创建一个数组. 数组中每个元素的类型都相同. 数组的长度.length是一个域,不是length()方法,而String的长度才是length()方法. private修饰符不能修饰类.…
1.构造BaseDao泛型类 class BaseDao<T>{ private Class<T> entityClass; // 通过反射获取实际运行的精确类 public BaseDao() { Type genType = getClass().getGenericSuperclass(); Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); entityClass=(Class<…
Student stu[]=new Student[N]; Student stu={new Student(),~~~}; JAVA类型转换 String转为float String转为INT…
通配符?,?表示占位,表明将来使用的时候在指明类型 <?>无限定的通配符, 是让泛型能够接受未知类型的数据 <? extends E> 有上限通配符,能够接受指定类及其子类类型的数据,E就是该泛型的上边界  注意:这里不仅继承了父类E的子类,也可以代指显现了接口E的类 <? super E>:有下限的通配符.能够指定其父类类型的数据,E就是该泛型类型的下边界. 注意:你可以为一个泛型指定上边界或者下边界,但是不能同时指定上下边界 与<T>类型比较 比起<…
当类中要操作的引用数据类型不确定时,可以定义泛型类完成扩展.下面是程序演示. package packB; class Student { //定义学生类 public String st = "student"; } class Worker { //定义工人类 public String wo = "worker"; } //定义泛型类 class Operate<type> { // <type> 是给不确定的类型自定义的名字 priv…
线程的内存模型 32位操作系统的寻址空间为2的32次方,也就是4GB的寻址空间:系统在这4GB的空间里划分出1GB的空间给系统专用,称作内核空间,具有最高权限:剩下3GB的空间为用户空间(一般JVM的可用内存最大只能是2GB),只能访问当前线程划分的内存地址.用户线程需要访问硬件资源的时候需要委托内核线程进行访问,这就涉及到CPU上下文在用户模式和内核模式的切换.因此在使用线程或者进程的时候需要尽量避免不必要的用户模式和内核模式的切换. 进程是资源管理的最小单位,线程是CPU调度的最小单位.线程…
public class Sample { public static void main(String[] args) { String str = "Hello world"; System.out.println("String is: " + str); String str2 = new String("Welcome to java"); System.out.println("The second string is: &…
Java中我们经常要做一些判断,而对于判断的话,用的最多的便是“>”.“==”.“<”的比较,这里我们进行一个Long类型数据和long类型数据的比较大小的讲解. Java中Long和long的区别Java的数据类型分为两种:1.基本类型:byte(8),short(16),int(32),long(64),float(32),double(64),char(16),boolean(1)2.对象类型:Byte,Short,Integer,Long,Float,Double,Character,…
无界通配符<?>很容易和原生类型混淆. 以List为例: List表示持有任何Object类型的原生List,其实就等价于List<Object> List<?>表示某种具有特定类型的非原生List(同构集合),只是我们不知道它的具体类型是什么,所以我们就不允许往里set数据 看下面例子: public class Wildcards { // 这里Holder等价于Holder<Object>,Holder<Object>没警告但下面的方法调用…
在可能出现异常的方法上声明抛出可能出现异常的类型: 声明的时候尽可能声明具体的异常,方便更好的处理. 当前方法不知道如何处理这种异常,可将该异常交给上一级调用者来处理(非RuntimeException类型的异常). 方法一旦使用throws声明抛出方法内可能出现的异常类型, 该方法就可以不再过问该异常了: 一个方法调用另一个使用throws声明抛出的方法,自己要么try...catch , 要么也throws;   格式: public 返回值类型  方法名(参数列表...) throws 异…
Java程序运行机制: Java语言的编译-->解释-->运行过程 1.编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了. 2.解释型语言:源代码不是直接翻译成机器语言,而是程序在运行时先翻译成中间代码,再由解释器对中间代码进行解释运行.…
Java: https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/BIO-NIO-AIO.md https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20IO.md Linux: https://github.com/CyC2018/CS-Notes/blob/master/notes/Socket.md 理解Java三种IO模型,BIO就是操作系统提供的阻塞IO…
finalize()方法是Object类的一个方法,在垃圾回收器执行的时候,会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如文件关闭等. 成员访问修饰符: 默认访问:包访问. protected:本包以及子类访问. 因此protected的范围要比默认范围大.…
this可以引用本类的静态变量和实例变量,而在静态方法中不能引用实例变量(因为当静态方法加载时,实例变量还没有被定义和初始化) this不可以引用局部变量.例如方法的参数变量,以及在方法中定义的局部变量,都不可以使用this.来引用 用法有三处: ①当要明确地指出使用本类实例变量时. ②把this当做参数传递. ③当内部类要使用外部类的对象时.…
abstract class Stack[A] { def push(x: A): Stack[A] = new NonEmptyStack[A](x, this) def isEmpty: Boolean def top: A def pop: Stack[A] val contents: T = _ //初始值:_ ,表示一个默认值,数字类型是0 ,boolean是false ,Unit是() (无参数无返回),其他是null } class EmptyStack[A] extends St…
什么是形式参数,基本类型,引用类型? 形式参数(形参)百度百科里的解释是:在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数. 通俗的说就是:形式参数是指在函数名后面的小括号里定义的变量, 用于接受来自调用函数的参数. 基本类型:四类八种,储存的是数据本身 byte short int long float double boolean char 引用类型:储存的是地址值 比如 类,接口,集合之类的 然后: 对于基本类型,形式参数的改变不会影响实际参数 对于引用类型,形式…
public class Sample { public static void main(String[] args) { int num; num = ; System.out.println("the value of num is " + num); } } OUTPUT: the value of num…
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http://item.jd.com/12299018.html 上节我们介绍了泛型的基本概念和原理,本节继续讨论泛型,主要讨论泛型中的通配符概念.通配符有着令人费解和混淆的语法,但通配符大量应用于Java容器类中,它到底是什么?本节,让我们逐步来解析. 更简洁的参数类型限定 在上节最后,我们提到一个例子,为了将Inte…
转自:http://www.linuxidc.com/Linux/2013-10/90928.htm T  有类型 ?  未知类型 一.通配符的上界 既然知道List<Cat>并不是List<Anilmal>的子类型,那就需要去寻找替他解决的办法, 是AnimalTrianer.act()方法变得更为通用(既可以接受List<Animal>类型,也可以接受List<Cat>等参数).在java里解决办法就是使用通配符“?”,具体到AnimalTrianer,…