public static void main(String[] args) throwsException {
String[] arr= new String[]{"1", "2", "3"};
changeAddr(arr,0, 2);
System.out.println(Arrays.toString(arr));
Person person= newPerson();//T 作为对象传入,返回一个T类型对象
String[] arr1 = new String[]{"hhh", "20"};//这里可以看到,Person并不需要进行强转,因为返回值类型在传入T的时候在返回值之前的进行了定义,将其定义为了Person
person =handleData(person, arr1);
System.out.println(person.toString());
}/*** 简单的demo,示例交换数组索引位置的值
*
*@paramarr 传入的数组
*@parambegin 交换索引
*@paramend 交换索引
*@param 定义的一个类型
* 表示声明一个泛型类型T,在调用方法,传入参数的时候再确定T的类型,T可以是所有类型,但是确定了是传入的类型,
* 比如以下方法,传入的为 T[] ,就代表T是声明这个参数的类型使用
* 其实T可以使用任意的字符代替,但是一般使用 T 表示Type 类型的意思(声明一个类型 )
* T通常放在方法的返回值声明之前
* T不是一个类。但是因为在之前的定义好了一个泛型T,则泛型类型T可以作为数据类型使用
*
* <> 方法中传入的T,其实就是声明的 >*/
static voidchangeAddr(T[] arr, Integer begin, Integer end) {
T temp=arr[begin];
arr[begin]=arr[end];
arr[end]=temp;
}/*** 示例使用泛型进行对象的传入与处理
*@paramt 泛型类型
*@paramnames 参数值
*@param 定义的传入与返回的持有对象的类型
*@return传入的类型
*@throwsException*/
static T handleData(T t, String[] names) throwsException {
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);
}
}returnt;
}