当前位置: 首页 > 面试题库 >

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

公孙盛
2023-03-14
问题内容

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

例:

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()知道谁在调用它?

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


问题答案:

最简单的方法如下:

String className = new Exception().getStackTrace()[1].getClassName();

但实际上,除非出于某些日志记录目的,否则不需要这样做,因为这是一项相当昂贵的任务。这是什么,你认为这是解决方案?我们可能会提出更好的建议。

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

然后,我强烈建议你寻找一个现有的ORM库,例如Hibernate,iBatis或任何JPA实现。



 类似资料:
  • 问题内容: 我想获取方法的调用者类,即 在方法栏中,我需要获取类名称,然后找到了该方法: 但是,即使是,当我尝试调用它时,Eclipse 也会说: 访问限制:由于必需的库C:\ Program Files \ Java \ jre7 \ lib \ rt.jar的限制,无法访问类型为Reflection的方法getCallerClass() 还有其他选择吗? 问题答案: 你可以生成堆栈跟踪并使用S

  • 问题内容: 我知道该类的名称,说 “ MyClass”, 并且想检索该对象。 MyClass.class 供将来参考。有没有办法做到这一点? 我已经浏览了整个网络,但发现与之相关的大多数内容都与有关,我认为这不适合我的情况。我不想初始化一个类,而只是获取一个类对象以备将来使用。 编辑:关于此的第一个答案: 我已经检查了该方法,但我认为这也应该初始化该类。现在,我可以使用完整参数来调用它,并传递给第

  • 问题内容: 要修复测试用例,我需要确定是否从特定的调用程序函数中调用了该函数。我负担不起添加布尔值参数,因为它会破坏定义的接口。怎么办呢? 这是我想要实现的。在这里,我无法更改operation()的参数,因为它是接口实现。 问题答案: 你可以试试

  • 问题内容: 我有两节课:和。后者声明为: 我需要的只是类中的方法(仅在其中,因为会有很多继承的类,而且我不想在所有这些类中都实现此方法),它将从静态调用返回类名。这是我在说的: 当我称它为: 但是父类中的每个声明只能访问父类变量,该变量的值为“ Action”。 有什么可行的方法吗? 问题答案: 总是返回使用该类的类的名称,因此使用静态方法并没有太大帮助。如果该方法不是静态的,则可以简单地使用ge

  • 问题内容: 我的目标是为此激发一个应用程序的时序图,我需要在运行时提供有关调用方和被调用方类名称的信息。我可以成功检索调用者函数,但无法获得调用者类名称吗? 当我打印堆栈时,没有有关调用程序类的信息。那么有可能在运行时检索调用方类吗? 问题答案: 好吧,在按提示进行了一些挖掘之后,这是我得到的: 调用时: 给定文件: 不知道从其他对象调用该对象时的行为。

  • 问题内容: 我正在研究一个项目,一个要求是,如果main方法的第二个参数以“ ” 开头(对于Linux),则应将其视为绝对路径(不是问题),但如果它不是以“”开头”,则它应获取该类的 当前工作路径 ,并将其附加给定的参数。 我可以通过几种方式获取类名:,和,等等。 问题是,这只会给我提供存储包的目录-即,如果我有一个存储在“ ”中的类,它将只给我“ ”,而忽略了实际存在的包名称。 有什么建议? 编