泛型的推断

    @Test
public void test3(){
//类型推断时使用两个类型的最小公倍数
int x1 = add(3,4);
Number x2 = add(3.5,4);
Object obj = add(3,"abc");
}
//在返回类型前加上<T>
public <T> T add(T x,T y){
return x;
}

传入一个数组,交换其中的两项:

    @Test
public void test4(){
String[] result = swap(new String[]{"abc","xyz","999"}, 1, 2);
for(String s:result){
System.out.println(s);
}
Book[] bs = swap(new Book[]{new Book("三国演义","罗贯中"),new Book("水浒传","施耐庵"),new Book("红楼梦","曹雪芹")}, 0, 2);
for(Book b:bs){
System.out.println(b.getName()+","+b.getAuthor());
}
//以下做法错误,T不可以为基本类型
//int[] arr = swap(new int[]{1,2,3},1,2);
}
//在返回类型前加上<T>
public <T> T[] swap(T[] a,int i,int j){
T temp = a[i];
a[i] = a[j];
a[j] = temp;
return a;
}

定义泛型时限定类型:

    @Test
public void test4(){
String[] result = swap(new String[]{"abc","xyz","999"}, 1, 2);
for(String s:result){
System.out.println(s);
}
Book[] bs = swap(new Book[]{new Book("三国演义","罗贯中"),new Book("水浒传","施耐庵"),new Book("红楼梦","曹雪芹")}, 0, 2);
for(Book b:bs){
System.out.println(b.getName()+","+b.getAuthor());
}
//以下做法错误,T不可以为基本类型
//int[] arr = swap(new int[]{1,2,3},1,2);
}
//在返回类型前加上<T>
public <T extends Object> T[] swap(T[] a,int i,int j){
T temp = a[i];
a[i] = a[j];
a[j] = temp;
return a;
}

上面代码要求T要是Object的子类,这其实是废话,如果把Object改为Number则编译时上面的两个方法都会报错,因为String和Book类都不是Number的子类。

Java泛型方法定义及泛型类型推断的更多相关文章

  1. Java 泛型方法、泛型类、通配符、通配符上下限

    泛型方法 泛型方法定义规则: 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前. 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开.一个泛型 ...

  2. Java语言定义的线程状态分析

    说到线程,一定要谈到线程状态,不同的状态说明线程正处于不同的工作机制下,不同的工作机制下某些动作可能对线程产生不同的影响. Java语言定义了6中状态,而同一时刻,线程有且仅有其中的一种状态.要获取J ...

  3. 开涛spring3(12.4) - 零配置 之 12.4 基于Java类定义Bean配置元数据

    12.4  基于Java类定义Bean配置元数据 12.4.1  概述 基于Java类定义Bean配置元数据,其实就是通过Java类定义Spring配置元数据,且直接消除XML配置文件. 基于Java ...

  4. Java常量定义

    Java常量定义 /** * char 类型常量 */ private static final char CHAR = 'A'; /** * byte 类型常量 */ private static ...

  5. java数组遍历、java方法定义

    1.遍历数组for与foreach String [] test =  {"java","php","bootstrap","vu ...

  6. Java常量定义需要注意的两点

    在任何开发语言中,都需要定义常量.在Java开发语言平台中也不例外.不过在Java常量定义的时候,跟其他语言有所不同.其有自己的特色.在这篇文章中,主要针对Java语言中定义常量的注意事项进行解析,帮 ...

  7. Java常量定义需要注意事项及static作用(复习)

    在任何开发语言中,都需要定义常量.在Java开发语言平台中也不例外.不过在Java常量定义的时候,跟其他语言有所不同.其有自己的特色.在这篇文章中,主要针对Java语言中定义常量的注意事项进行解析,帮 ...

  8. java基础知识——Java的定义,特点和技术平台

    (作者声明:对于Java编程语言,很多人只知道怎么用,却对其了解甚少.我也是其中一员.所以菜鸟的我,去查询了教科书以及大神的总结,主要参考了<Java核心技术>这本神作.现在分享给大家!) ...

  9. 获取Spring容器中Bean实例的工具类(Java泛型方法实现)

    在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean. 因此,实现一个获得bean实例的工具类,就很有必要. 以前,写了一个根据bean的名称和类型获取b ...

随机推荐

  1. VS2010 C# 调用Web Service .

    转自:http://blog.csdn.net/fenglailea/article/details/7262566 打开VS2010,打开"文件-新建-网站",选择"A ...

  2. SPRING IN ACTION 第4版笔记-第二章-002-@ComponentScan、@Autowired的用法

    一.@ComponentScan 1. @Configuration //说明此类是配置文件 @ComponentScan //开启扫描,会扫描当前类的包及其子包 public class CDPla ...

  3. OA学习笔记-003-Hibernate3.6配置

    一.jar包:核心包, 必须包, jpa, c3p0, jdbc antlr-2.7.6.jarc3p0-0.9.1.jarcommons-collections-3.1.jardom4j-1.6.1 ...

  4. 转: 二十八、Java图形化界面设计——中间容器(Jpanel)

    http://blog.csdn.net/liujun13579/article/details/7762835 上一篇讲解了Jframe顶层容器,例子中生成了一个空的窗体,在实际编程过程中,一般很少 ...

  5. 【HDOJ】1198 Farm Irrigation

    其实就是并查集,写麻烦了,同样的代码第一次提交wa了,第二次就过了. #include <stdio.h> #include <string.h> #define MAXNUM ...

  6. Ajax在PC端可以使用但在手机端不能使用

    ajax代码如下,仔细看看也没有什么错,电脑端可以调用并正确的返回结果,手机端却不可以 function GetSumData(time) { var device = "Phone&quo ...

  7. Jquery UI dialog 详解 (中文)

    转载▼ 1 属性 1.11 autoOpen ,这个属性为true的时候dialog被调用的时候自动打开dialog窗口.当属性为false的时候,一开始隐藏窗口,知道.dialog("op ...

  8. Eclipse插件Subclipse各版本插件下载地址以及与Subverison的对应关系

    Subclipse 1.4.x includes and requires Subversion 1.5.x client features and working copy format. Subc ...

  9. Bootstrap框架中的字形图标的理解

    最近项目中准备使用 Bootstrap 框架,看中了Ace Admin 这套皮肤,看其代码的时候,发现使用了字形图标.下面内容来源于网络,根据自己对新知识的学习曲线重新整合了一下: 一,字形图标的定义 ...

  10. Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1105  Solved: 331[Submit][Statu ...