黑马程序员技术交流社区

标题: 关于泛型方法参数传递的问题 [打印本页]

作者: 孔肖    时间: 2012-8-11 11:57
标题: 关于泛型方法参数传递的问题
定义一个方法,能够将任意类型的数组中的元素转换成相应类型的对象
public static <T> void fillObject(T[] t, T obj)
{
          for(int i=0; i<t.length; i++)
          {
                 t = obj;
          }
}

例如 :将 int[] arr = {1,2,3}; 中的元素转变成相应的Integer对象,
在调用fillObject()方法的时候,参数应该怎么传呢?


作者: 李知伦    时间: 2012-8-11 15:23
public static <T> void fillObject(T[] t, T obj)
{
          for(int i=0; i<t.length; i++)
          {
                 t = obj;
          }
}
先说你的3个问题
1.目标是:任意类型的数组中的元素转换成相应类型的对象
但是你只定义了一个T obj对象,它无法容纳所有数组元素
所以你可以定义一个集合替代单个对象

2. t = obj;赋值时,把你想赋值的对象放前面,应该是obj=t;

3.将 int[] arr = {1,2,3}; 中的元素转变成相应的Integer对象
其中int和Integer不是一个类型,所以当你用泛型T的时候,传入的对象不符合要求
所以应该是Integer [] arr = {1,2,3};
  1. import java.util.*;

  2. public class test{//TestfillObject {

  3.         public static void main(String args[]) {
  4.          
  5.           Integer [] arr = {1,2,3};        
  6.           Collection<Integer> a=new ArrayList<Integer>();
  7.           fillObject(arr,a);
  8.           System.out.println(a);
  9.          
  10.         }

  11.         public  static <T> void fillObject(T[] t,Collection<T> obj)
  12.         {
  13.                          for(T temp:t){
  14.                                 obj.add(temp);
  15.                          }
  16.         }
  17. }
复制代码

作者: 王程    时间: 2012-8-11 18:58
如果你想问的是包装类的拆箱和装箱的原理的话,我查看了一下API
public static final Class<Integer>        TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
final static char[] digits = {
        '0' , '1' , '2' , '3' , '4' , '5' ,
        '6' , '7' , '8' , '9' , 'a' , 'b' ,
        'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
        'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
        'o' , 'p' , 'q' , 'r' , 's' , 't' ,
        'u' , 'v' , 'w' , 'x' , 'y' , 'z'
    };
final static char [] DigitTens = {
        '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
        '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
        '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
        '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
        '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
        '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
        '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
        '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
        '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
        '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
        } ;

    final static char [] DigitOnes = {
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        } ;

显而易见,Integer这个类是把所有可能用到的数字与小写字母都提前封装在了集合中,等程序用到Integer类,或者需要将int类型转换成Integer类型时,再将这个数字对应的元素转换一下就可以了,Integer中的方法都是操作的数组中的元素




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2