如何获取Java中调用类的名称?

在这件事上,我需要一些帮助,


例:


public class A {


    private void foo() {


          //Who Invoked me


    }


}


public class B extends A { }


public class C extends A { }


public class D {


     C.foo();


}

基本上是这种情况。我的问题是方法如何foo()知道谁在调用它?


编辑:基本上我正在尝试做一个数据库层,并且在类AI中将创建一个将生成SQL语句的方法。通过获取调用类的所有公共属性的值来动态生成此类语句。


白衣染霜花
浏览 576回答 3
3回答

米脂

最简单的方法如下:String className = new Exception().getStackTrace()[1].getClassName();但是实际上,除非出于某些日志记录目的,否则不需要这样做,因为这是一项相当昂贵的任务。这是什么,您认为这是解决的问题?我们可能会提出更好的建议。编辑:您评论如下:基本上,我正在尝试做一个数据库层,在A类中,我将创建一个将生成sql语句的方法,通过获取调用类的所有公共属性的值来动态生成此类语句。然后,我强烈建议您寻找一个现有的ORM库,例如Hibernate,iBatis或任何JPA实现。

吃鸡游戏

Java 9:堆栈漫游APIJEP 259为堆栈遍历提供了有效的标准API,可轻松过滤和延迟访问堆栈跟踪中的信息。首先,您应该获得的实例StackWalker:import static java.lang.StackWalker.Option.RETAIN_CLASS_REFERENCE;// other importsStackWalker walker = StackWalker.getInstance(RETAIN_CLASS_REFERENCE);您可以调用该getCallerClass()方法:Class<?> callerClass = walker.getCallerClass();无论如何配置StackWalker实例,该getCallerClass方法都将忽略反射帧,隐藏帧以及与MethodHandles 相关的帧。另外,该方法不应当被所述第一堆栈帧上调用。

守着星空守着你

也许对于您的用例,将调用者的类传递给方法是有意义的,例如:public class A { public void foo(Class<?> c) { ... } }并这样称呼它:public class B { new A().foo(getClass() /* or: B.class */ ); }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java