获取子类中的超级父类方法名称层次结构

时间:2017-09-13 14:15:50

标签: java string inheritance multiple-inheritance core

我有以下程序,

class A
{
    int i;
    B b_obj = new B();

    public void classAMethodStart()
    {
        system.out.println("class a method");
        b_obj.classBMethod();
    }
}

class B extends Class C
{
    public void classBMethod()
    {
        methodInClassC();
    }
}

class C
{
    public void methodInClassC()
    {
        //.. to do stuff
        //I want to get the ClassA method name here

         this.getClass().getName();
    }
}

当我尝试以下this.getClass().getName()时,它会将输出显示为

  

java.lang.ClassB

我想要打印的预期输出是:

  

classAMethodStart()

3 个答案:

答案 0 :(得分:1)

this.getClass().getName()做什么

它获取被调用的对象,并获取其类的名称,因为您的实例是B的实例,它输出java.lang.ClassB

如何获取调用方法详细信息

您需要获取该线程的堆栈跟踪并向上移动以获取调用方法的详细信息:

class A {
  B b_obj = new B();

  public void classAMethodStart() {
    System.out.println("class a method");
    b_obj.classBMethod();
  }
}

class B extends C {
  public void classBMethod() {
    methodInClassC();
  }
}

class C {
  public void methodInClassC() {
    final StackTraceElement[] trace = Thread.currentThread().getStackTrace();
    System.out.println(trace[3].getMethodName());
  }
}

class Runner {
  public static void main(final String... args) {
    new A().classAMethodStart();
  }
}

答案 1 :(得分:0)

您必须使用processSteps.map { psteps: Seq[ProcessStepsModel] => Future.sequence(psteps.map { step => { val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id) prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs))) } }) } // Has type Future[Seq[models.ProcessStepPrerequisitesModel]] 来获取方法名称。

根据Java Docs:

  

Throwable.getStackTrace()返回的堆栈跟踪中的元素。每个元素代表一个堆栈帧。除堆栈顶部的堆栈帧之外的所有堆栈帧表示方法调用。堆栈顶部的框架表示生成堆栈跟踪的执行点。通常,这是创建与堆栈跟踪相对应的throwable的点。

StackTraceElement有java.lang.StackTraceElement。使用此功能,您必须追溯到您要查找的方法。

答案 2 :(得分:0)

首先,我从代码中注意到的一些事情: 1.不可理解的 2.无调查(主要方法)
3.必须承担控制流程

基本上你的代码在可读性方面非常糟糕。
现在谈到真正的问题:

this.getClass()。getName();

1.这是指传递给方法的隐式对象,换句话说是调用方法的对象。
2.getClass()作为方法名称建议为您提供对象类“类”的对象。
3.getName()为您提供类的名称。

java命名约定在这里很容易理解。那就是如果方法说getClass()你为什么期待这个方法?