如果要完全还原,还是要用判断,就是用if (obj instanceof xxx)来判断是什么类型,如果你的程序允许的话。

解决方案 »

  1.   

    如果 传进的对象名字未 obj,那么就用obj.getClass().getName(),然后再把它new Instance
      

  2.   

    呵呵,if (obj instanceof xxx)这样的话,Java的数据类型有好多种啊,如果是自己定义的类,那就是无数啦。这样岂不是累死?而且n多if(    )写在程序也是难看啊。
    有没有简单好用一点的方法。
    知道类或是方法的名字,用反射Reflect可以得到和调用这个类和方法。
    难道知道一个对象的名字,却不能将它还原到它的原型?
      

  3.   

    to littletuzi(小小兔子):
    是不能new Instance()的,我传进来的值还要使用的,new Instance()就是一个新的对象了。
      

  4.   

    launch401(launch401) :
    是的,obj.getClass().getName()可以得到类的名字,但是如何转换成这个类型?
      

  5.   

    reflect和instanceof 差不多吧
      

  6.   

    RTTI的问题,应该只有用instantceof 或是 reflection
    我不知道你要怎么用你的对象?如果你要把method方法写成与传进来的obj的特性无关的话,那用处就不大了,那就用reflection吧,否则肯定要用if判断的。
      

  7.   

    在这里并不是用method(Integer), method(String) 这样的重载方法。
    只有一个方法method(Object),所以用Reflect是解决不了问题的。
    用instanceof是一个方法,不过我觉得太笨重了。
    :)
      

  8.   

    thinking in java中也论述过这个问题,好像就是用if判断的,他有一种改良方法是把type写在数组了,这样就不用很多if了,但本质还是判断。
      

  9.   

    直接强制转换:

    if(obj.getClass().getName().equeal("Integer"){
    Integer i = (Integer)obj;
    }
      

  10.   

    呵呵,你这样转换不如:
    if( obj instanceof Integer){
        Integer i = (Integer)obj;
    }
      

  11.   

    请问 launch401(launch401):
    Thinking in Java中讲到这个问题是在第几页?很久没翻这本经典书。
    请告诉我让我查一下。谢谢。
      

  12.   

    使obj下溯到原类型需重新定义一个对象变量,此对象变量类型为原类型,非Object。与instanceof不同:obj.getClass().getName().equeal("java.lang.Integer")就用这个笨方法
      

  13.   

    to ntzls(三星堆):
    牛人,请解释一下instanceof 与 equals有什么不同,并说明在这里用equals的优越性在哪里?我觉得用obj instanceof Integer 比
    obj.getClass().getName().equals("java.lang.Integer")要好。
      

  14.   

    instanceof判定返回true仅表示左边的实例可安全的强制转换为右边类,形如(右边类)左边实例,保准不会发生异常。而obj.getClass()返回的是此对象的原生类型Class,根据你的需求,应用getClass()来进行判断更恬当。public class T{
      public static void main(String[] args){
        TT tt = new TT();
        System.out.println(tt instanceof TTT);//false
        System.out.println(tt instanceof TT);//true
        System.out.println(tt instanceof T);//true,非原生类型
        System.out.println(tt.getClass().equals(TTT.class));//false
        System.out.println(tt.getClass().equals(TT.class));//true,此法亦可
        System.out.println(tt.getClass().equals(T.class));//false
      }
    }
    class TT extends T{}
    class TTT extends TT{}BTW:XX法师是牛人,偶不是:-)