public static void main(String[] args) throws Exception {
String[] arr = new String[]{"1", "2", "3"};
changeAddr(arr, 0, 2);
System.out.println(Arrays.toString(arr));
Person person = new Person();
//T 作为对象传入,返回一个T类型对象
String[] arr1 = new String[]{"hhh", "20"};
//这里可以看到,Person并不需要进行强转,因为返回值类型在传入T的时候在返回值之前的<T>进行了定义,将其定义为了Person
person = handleData(person, arr1);
System.out.println(person.toString());
} /**
* 简单的demo,示例交换数组索引位置的值
*
* @param arr 传入的数组
* @param begin 交换索引
* @param end 交换索引
* @param <T> 定义的一个类型
* <T>表示声明一个泛型类型T,在调用方法,传入参数的时候再确定T的类型,T可以是所有类型,但是确定了是传入的类型,
* 比如以下方法,传入的为 T[] ,就代表T是声明这个参数的类型使用
* 其实T可以使用任意的字符代替,但是一般使用 T 表示Type 类型的意思(声明一个类型 )
* T通常放在方法的返回值声明之前
* T不是一个类。但是因为在之前的<T>定义好了一个泛型T,则泛型类型T可以作为数据类型使用
*
* <> 方法中传入的T,其实就是声明的<T> </>
*/
static <T> void changeAddr(T[] arr, Integer begin, Integer end) {
T temp = arr[begin];
arr[begin] = arr[end];
arr[end] = temp;
} /**
* 示例使用泛型进行对象的传入与处理
* @param t 泛型类型
* @param names 参数值
* @param <T> 定义的传入与返回的持有对象的类型
* @return 传入的类型
* @throws Exception
*/
static <T> T handleData(T t, String[] names) throws Exception {
Class c = t.getClass();
Field[] fields = c.getDeclaredFields();
Method[] methods = c.getDeclaredMethods();
for (Field field : fields) {
//暴力访问
field.setAccessible(true);
for (String s : names) {
field.set(t, s);
}
}
return t;
}

注意:使用泛型之前一定要对泛型进行声明,在返回值之前的<T>就是对泛型类型的声明

语法:

public <泛型声明> T methodName(args...);

JAVA 泛型方法<T>的更多相关文章

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

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

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

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

  3. Java泛型方法与泛型类的使用------------(五)

    泛型的本质就是将数据类型也参数化, 普通方法的输入参数的值是可以变的,但是类型(比如: String)是不能变的,它使得了在面对不同类型的输入参数的时候我们要重载方法才行. 泛型就是将这个数据类型也搞 ...

  4. 【转】Java泛型方法

    1. 定义泛型方法 (1) 如果你定义了一个泛型(类.接口),那么Java规定,你不能在所有的静态方法.静态初块等所有静态内容中使用泛型的类型参数.例如: public class A<T> ...

  5. java泛型方法

    Tool.java package cn.stat.p9.fanxing.demo; public class Tool<QQ> {//不确定类型时可以用泛型 private QQ q; ...

  6. JAVA 泛型方法 和 静态方法泛型

    /* //  泛型方法和静态方法泛型 泛型类定义的泛型 在整个类中有效 如果被方法使用 那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定 为了让不同方法可以操作不同类型  而且类型还 ...

  7. Java泛型方法与数据查询

    在使用JDBC查询数据库中数据时,返回的结果是ResultSet对象,使用十分不方便.Commons DbUtils组件提供了将ResultSet转化为Bean列表的方法,但是该方法在使用时需要根据不 ...

  8. JAVA泛型方法与类型限定

     泛型方法可以定义在普通类中,也可以定义在泛型类中 class ArrayAlg{ public static <T> T getMiddle(T...a){ return a[a.len ...

  9. Java泛型方法和构造函数

    可以在方法声明中定义类型参数,它们在方法的返回类型之前的尖括号中指定.包含泛型方法声明的类型不必是通用类型.可以在非静态方法声明中使用为泛型类型指定的类型参数. 示例 以下代码显示如何为方法m1()定 ...

  10. Java泛型方法定义及泛型类型推断

    泛型的推断 @Test public void test3(){ //类型推断时使用两个类型的最小公倍数 int x1 = add(3,4); Number x2 = add(3.5,4); Obje ...

随机推荐

  1. 深入JDK源码,这里总有你不知道的知识点!

    Java的基础知识有很多,但是我认为最基础的知识应该要属jdk的基础代码,jdk的基础代码里面,有分了很多基础模块,其中又属jdk包下面的lang包最为基础. 我们下面将总结和分析一下lang包下面最 ...

  2. 删除所有正在运行和退出的docker实例

    docker ps -a能显示所有docker实例的状态,包含已经退出了的: 加上-q参数,只显示container id 使用这个命令,把docker ps -aq产生的输入作为输入传入到docke ...

  3. Android(java)学习笔记10:同步中的死锁问题以及线程通信问题

    1. 同步弊端: (1)效率低 (2)如果出现了同步嵌套,就容易产生死锁问题 死锁问题及其代码 : (1)是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象 (2)同步代码块的 ...

  4. 使用ParseExact方法将字符串转换为日期格式

    实现效果: 知识运用: DateTime结构的ParseExact方法 public static DateTime ParseExact(string s,string format,IFormat ...

  5. on-session问题

    .D:\0kecheng\bos\bosv2.0_chapter03.无条件查询. 方法1.@JSON(serialize=false)是注解排除不需要加载的实体类上,找到它的get方法,解决no-s ...

  6. Spring data jpa命名规范

    JPA命名规范 (sample与JPQL等效) Table 4. Supported keywords inside method names Keyword Sample JPQL snippet ...

  7. 【luogu P2661 信息传递】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2661#sub 一种利用并查集求最小环的做法: 对于每个同学看作一个点,每次信息传递是一条有向边,当出现最小环 ...

  8. 初入AngularJS基础门

    作为mvvm 框架过重 不适用于性能比较高的移动端的web栈, ui组建性对复杂,不利于重用 AngularJS 构建一个CRUD ( create retrieve update delete )的 ...

  9. Angularjs实例5

    <!DOCTYPE html><html lang="zh-cn" ng-app="myApp"><head><met ...

  10. AutoCAD笔记

    1.等距离复制:使用菜单栏下“修改->阵列”功能或右侧快捷方式,可以轻松复制,以下是阵列设置界面 2.快捷键-图案填充和渐变色:H+空格 3.画图时时常会用到Ctrl+V,但难免会按成了Ctrl ...