小弟菜鸟 , 请大牛们帮忙分析一下, 共同进步 .呵呵.
和我一样的,欢迎也来讨论.

解决方案 »

  1.   

    我认为不可能,因为cast,也就是xxx x = (xxx)obj属于编译期(compile-time),而你的动态,属于运行期(runtime)
      

  2.   

    RTTI 是什么? :( 不懂呀. 不好意思.楼上说不可能. 那如何根据一个OBJECT调用他原来的东西呢?
      

  3.   

    Run-Time Type Identification jvm会在运行期类型识别的,这一过程是自动的,你干吗要干预?
      

  4.   

    好像不行。java语言本身定义就是要求强类型的。类型转换必须 manual。呵呵
      

  5.   

    呵呵,终于找到解决方案. 
    直接getClass() 有了Class 后俺发现想干什么都可以,哈哈
      

  6.   

    试了一下,getClass的确可以获得cast之前的类信息
      

  7.   

    getMethods()太爽了,无所不能啊.:)
      

  8.   

    这个不是cast,你手上的还是Object类型,因为cast是对应于强类型的编译期。但是reflection也就是Class/Method/Field/Constructor/Array等确实可以实现很多功能>试了一下,getClass的确可以获得cast之前的类信息
    我对 believefym(暮色,miss,迷失,miss) 说这样的话有点失望,难道你原先一直以为return java.lang.Object.class?
      

  9.   

    虽然还是Object 可是Cast也没有太多意义,因为以前的想法是调用它的方法,既然它的方法能调用了,何必又要在意它的名字呢? 其本质是我们需要的,我想这才是更深层的"多态"吧.
    呵呵,个人愚见
      

  10.   

    这个不是cast,你手上的还是Object类型,因为cast是对应于强类型的编译期。但是reflection也就是Class/Method/Field/Constructor/Array等确实可以实现很多功能>试了一下,getClass的确可以获得cast之前的类信息
    我对 believefym(暮色,miss,迷失,miss) 说这样的话有点失望,难道你原先一直以为return java.lang.Object.class?-----------------------
    受教了,这个确实不太懂,也没研究过
    shine333(enihs)能否对
    “这个不是cast,你手上的还是Object类型,因为cast是对应于强类型的编译期。”
    再解释一下,或者给个例子说明一下
      

  11.   

    cast是指NewType x = (NewType) y;这样的方式,这个一定是要在编译期完成的,即使是范型,你可以class MyClass<T> {
      T[] array = new T[10];
      public T get(int i) { return array[i]; }
    }但是你也要MyClass<String> a = new MyClass<String>(); String s = a.get(0);
    或者MyClass b = new MyClass(); Object o = a.get(0); String s = (String) o;
    也就是说类型(Type)一定要在编译期(Compile Time)显式(Explicitly)指定或者改变(cast)而在运行期(Runtime),如果没有在编译期指定的话,你只能得到的是内容而非类型的变化。比如你有一个Object,getClass()它返回的就是Class类型,这个类型是不会变的(当然,1.5Class也是范型,不过如上所述,需要编译期指定),变得只是这个Class代表的内容不同。
      

  12.   

    JDK1.5以后,可以cast回原形,但是仍然需要在编译期确定比如Class<A> clazz = (Class<A>) obj.getClass();
    A a = clazz.cast(obj);这里面A不管是作为a的类型还是clazz范型时的参数,都需要在编译期(编码时)确定
    这个和A a = (A) a从本质上没有太大区别当然,用了Class.cast()可以接受一个从其他地方传来的参数,或者本身也使用范型(也就是让调用者来确定类型T),但是归根结底,这个类型如需要事先确定,而无法简简单单根据运行时的内容(比如一个String的内容,"java.util.Date"来确定)