【问题标题】:How to get parent class name using getClass().getSuperclass()? [closed]如何使用 getClass().getSuperclass() 获取父类名称? [关闭]
【发布时间】:2013-12-25 07:24:05
【问题描述】:

我正在尝试使用

获取父类名称
public class ClassA  extends Draw{

    public ClassA(){
        super();
    }
    .....

} 
 public class ClassC {

    public getParent(Object a_class)
    {

        String superClass= a_class.getClass().getSuperclass().toString();

    }

}

我遇到以下错误

Exception in thread "main" java.lang.StackOverflowError
    at Draw.<init>(Draw.java:2)
    at ClassA.<init>(ClassA.java:2)
    at ClassA.<init>(ClassA.java:5)
    at ClassA.<init>(ClassA.java:5)
    at ClassA.<init>(ClassA.java:5)
    at ClassA.<init>(ClassA.java:5)

如何获取父类名称 我需要一个父类名如何获取

【问题讨论】:

  • 如果没有 Draw.java 和 ClassA.java 的源代码,我们怎么知道? Stackoverflow 不是谜语网站!
  • Javadoc 说:If this {@code Class} represents either the {@code Object} class, an interface, a primitive type, or void, then null is returned。您是否正在尝试获取原语的超类?
  • 为什么 ClassA a_class=new ClassA();getParent(ClassA a_class)
  • 堆栈跟踪显示 ClassA 的构造函数正在递归调用自身。请告诉我们这个构造函数。
  • 我需要一个父类名如何获取

标签: java


【解决方案1】:

使用Class.getName():

String superClass = a_class.getClass().getSuperclass().getName();

要仅获取名称而不是包名称,请使用Class.getSimpleName()

String superClass = a_class.getClass().getSuperclass().getSimpleName();

但是,a_class 已经是一个 Class 实例,因此您可能希望改用 a_class.getSuperclass()

【讨论】:

  • 我遇到了同样的错误
【解决方案2】:

我想你只是想要

super.getClass().getName();

或者可能

super.getClass().getCanonicalName();

或者,你可以使用

this.getClass().getSuperclass().getName(); // <-- or getCanonicalName()

【讨论】:

    【解决方案3】:
    super.getClass().getName(); or
    yourClass.getClass().getSuperclass().getName();
    

    应该没问题

    【讨论】:

      猜你喜欢
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多