现在手上有两个数组,一个String数组,一个Object数组,两个数组长度一样。
比如String数组内的前3个值是"String" "Date" "Integer"
现在要根据String数组内的值,对Object数组的值进行类型转换,Object.get(0)要转换成String,get(1)转换成Date类型。
问题:怎么样在强制类型转换时 根据一个String值得到相对应的类型?

解决方案 »

  1.   

    用JAVA的反射机制能实现LZ的需求
      

  2.   

    你得提供全名
    不然怎么知道Date是java.util.Date还是xxx.Date
      

  3.   

    Class type=Class.forName("java.util.Date");
    (type) obj;我是这样想的
      

  4.   


    public class Test {
    public static void main(String[] args){
    String[] a = new String[]{"java.lang.String","java.util.Date"};
    Object[] b = new Object[]{"abc",new java.sql.Date(System.currentTimeMillis())}; try {
    Class a1 = Class.forName(a[0]);
    Class a2 = Class.forName(a[1]);
    String aaa = a1.cast(b[0]).getClass().getSimpleName();
    String bbb = a2.cast(b[1]).getClass().getSimpleName();
    System.out.println(aaa);
    System.out.println(bbb);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    }
      

  5.   

    楼主要把"Object数组的值进行类型转换"
      

  6.   

    楼主为什么不定义一个类??
    import java.util.Date;class People{private String name;private Date date;private Integer age;}
      

  7.   

    回7楼:
    其实要做的是一个数据转移的东西
    从sql server到oracle里,现在碰到的问题是:1.sql server数据库里的字段名和oracle里的不一样,一边是用拼音命名,一边是用英文;2.而且并不是每列都需要转移的,只需要其中一部分;
    一开始我也想过7楼的方法,给每一个表映射一个类,但是看了下sql server里有200多张表要转移,想偷懒就放弃了。
    现在想用XML做成一个通用点的,只需给需要转移的表和列写一段XML来完成。
      

  8.   

    import java.lang.reflect.Method;public class Test {
        public static void main(String[] args) {
            String[] a = new String[] { "java.lang.String", "java.util.Date" };
            Object[] b = new Object[] { "abc", new java.sql.Date(System.currentTimeMillis()) };        try {
                String str ="afda";
                
                Class a0 = Class.forName(a[0]);
                Class a1 = Class.forName(a[1]);            Method m = null;
                Object b0 = null;
                Object b1 = null;
                try {
                    m = a0.getMethod("toString", new Class[0]);
                    b0 = (Object) m.invoke(b[0], new Object[0]);                m = a1.getMethod("clone", new Class[0]);
                    b1 = (Object) m.invoke(b[1], new Object[0]);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println(b0);
                System.out.println(b1);        } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    LZ看看行不行
      

  9.   

    10楼:
    我要做的就是一个类型转换
    一般是
    Object obj = new Object();
    String str = (String) obj;
    现在的情况是我需要把Object对象转换成什么类型,是通过一个String数组得到
    问题是我拿不到()里面的强制转换类型先谢谢9楼 现在有事要出去 回来再看
      

  10.   

    最终版:
    源码:
    import java.lang.reflect.Method;public class Test {
        public static void main(String[] args) {
            String[] a = new String[] { "java.lang.String", "java.util.Date" };
            Object[] b = new Object[] { "testString abc", new java.util.Date(System.currentTimeMillis()) };        Method m = null;
            Object bb = null;
            Class aa = null;
            try {
                for (int i = 0; i < a.length; i++) {
                    aa = Class.forName(a[i]);
                    // 因为String类没有clone方法,所以String类特殊处理
                    if ("java.lang.String".equals(aa.getName())) {
                        m = aa.getMethod("toString", new Class[0]);
                    } else {
                        // 只要有clone方法的类,都走这条分支,非final型的类都会有clone方法
                        m = aa.getMethod("clone", new Class[0]);
                    }
                    // 转换后的对象
                    bb = (Object) m.invoke(b[i], new Object[0]);
                    // 输出 类型:值
                    System.out.println(bb.getClass() + " : " + bb);            }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }输出结果:
    class java.lang.String : testString abc
    class java.util.Date : Sun Feb 21 18:44:48 CST 2010
      

  11.   

    结啦?我在公车上就一直想,这样做不对。。
    应该用instanceof判断,或直接equals判断,用反射做不了