public  class Father<T, ID extends Serializable> {           private Class<T> persistentClass;

           public Father()
/*     */   {
/*  43 */     this.persistentClass = ((Class<T>)((java.lang.reflect.ParameterizedType)super.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
/*     */   }
/*     */ 
/*     */   public Class<T> getPersistentClass()
/*     */   {
/*  53 */     return this.persistentClass;
/*     */   }
}
public class Son  extends Father<Bean, String>{
public static void main(String args[])
{
System.out.println(new Son().getPersistentClass().toString());
}
}输出结果为bean 问题:
((Class<T>)((java.lang.reflect.ParameterizedType)super.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);我调试了下,super.getClass()指向Son 为什么不是Father呢? 太奇怪了

解决方案 »

  1.   

    ...恩 我不知道对不对啊..  super.getClass();实际上意思就是调用父类getClass方法 而父类的方法也是获得当前对象的类型信息
    LZ你糊涂了.. 是调用方法 无论通过谁调用都是调用方法 除非你重写这个这个方法 否则他的作用都是获得当前对象的类型信息
      

  2.   

    super.getClass()返回的还是当前类的名称。应该是getClass().getSuperClass()才对
      

  3.   

    还是不明白啊.super不是调用父类方法么.哪怕是.getclass()也因该调用父类的啊。怎么是子类的呢?。奇怪了
      

  4.   


    LZ要冷静 我先问你 调用父类方法 父类是怎么实现getClass()的? 是获得当前对象的类型信息 那当前对象是谁? 是子类对象... LZ你先想想 好好想.. 把方法对象的关系区分开..
      

  5.   

    super.getClass()//得到父类class.getGenericSuperclass();//得到的是父类的泛型
      

  6.   


    不是得到父类CLASS 是调用父类的getClass方法获得当前对象的类型信息..
      

  7.   


    当然不对,super.getClass()返回的还是当前对象的class,因为这里指定的只是调用父类的getClass()方法,但是实际上getClass()从来没有被覆盖过,和调用this.getClass()是一致的
      

  8.   

    为了节约分数,在问个问题。
    大家知道 oracle 关键字 new 的用法么