3 回答
TA贡献1836条经验 获得超3个赞
最简单的方法如下:
String className = new Exception().getStackTrace()[1].getClassName();
但是实际上,除非出于某些日志记录目的,否则不需要这样做,因为这是一项相当昂贵的任务。这是什么,您认为这是解决的问题?我们可能会提出更好的建议。
编辑:您评论如下:
基本上,我正在尝试做一个数据库层,在A类中,我将创建一个将生成sql语句的方法,通过获取调用类的所有公共属性的值来动态生成此类语句。
然后,我强烈建议您寻找一个现有的ORM库,例如Hibernate,iBatis或任何JPA实现。
TA贡献1829条经验 获得超7个赞
Java 9:堆栈漫游API
JEP 259为堆栈遍历提供了有效的标准API,可轻松过滤和延迟访问堆栈跟踪中的信息。首先,您应该获得的实例StackWalker:
import static java.lang.StackWalker.Option.RETAIN_CLASS_REFERENCE;
// other imports
StackWalker walker = StackWalker.getInstance(RETAIN_CLASS_REFERENCE);
您可以调用该getCallerClass()方法:
Class<?> callerClass = walker.getCallerClass();
无论如何配置StackWalker实例,该getCallerClass方法都将忽略反射帧,隐藏帧以及与MethodHandles 相关的帧。另外,该方法不应当被所述第一堆栈帧上调用。
TA贡献1799条经验 获得超8个赞
也许对于您的用例,将调用者的类传递给方法是有意义的,例如:
public class A { public void foo(Class<?> c) { ... } }
并这样称呼它:
public class B { new A().foo(getClass() /* or: B.class */ ); }
添加回答
举报