我有以下类(请注意,方法是静态的):
class Base
{
public static void whosYourDaddy()
{
Class callerClass = // what should I write here to get caller class?
System.out.print(callerClass.getName());
}
}
Class A extends Base
{
public static void foo()
{
A.whosYourDaddy();
}
}
Class B extends Base
{
public static void bar()
{
B.whosYourDaddy();
}
}
当我打电话的时候:
A.foo();
B.bar();
我想得到输出:AB,而不是
BaseBase。甚至可以使用静态方法(在Java 7中)吗?
甚至可以使用静态方法(在Java 7中)吗?
不,静态方法不会被继承。仅继承非静态方法。
在您的情况下,将Base
(和子类)更改如下:
class Base
{
public void whosYourDaddy()
{
Class<?> callerClass = getClass();
System.out.print(callerClass.getName());
}
}
private static class Reflection { private static final SecurityManager INSTANCE = new SecurityManager(); static Class getCallClass() { return INSTANCE.getCallClass(2); } private Reflection() { } private static class SecurityManager extends java.lang.SecurityManager { public Class getCallClass(int i) { Class[] classContext = getClassContext(); if (i >= 0 && i + 1 < classContext.length) { return classContext[i + 1]; } return null; } }; }
您可以做但不应该做的是:)使用Throwable getStackTrace方法。除了气味之外,这很慢,因为获取堆栈跟踪没那么快。但是你会得到一个StackTraceElement数组,每个数组都将包含调用它的teh class的类(你也可以获取文件和行,如果你用a分隔两者:你可以在eclipse中获得一个可点击的链接,我从来没有做过这样的事情...)。
像这样的东西
String className = new Throwable().getStackTrace()[1].getClassName();
希望有帮助:)
我想用PHP在我的简单ORM中实现一个钩子系统: 这会导致一个致命错误: 致命错误:调用私人方法付款::before_save()从上下文'记录'中 有道理。 我可以将范围更改为public,但这似乎很难看:在保存()之前,除了支付之外,没有人与
问题内容: 如何从该类的静态方法获取该类的名称。例如 为了把它放在上下文中,我实际上想返回类名,作为异常中消息的一部分。 问题答案: 为了支持正确的重构(重命名类),则应使用以下任一方法: 或(感谢):
问题内容: 假设我有以下两个课程 如果我启动一个beta类型的新对象,如何执行在alpha类而不是beta中找到的逻辑?我可以使用<-我想知道是否可行。 Eclipse IDE中的自动键入功能使我可以选择从class 或class中进行选择。 问题答案: 你可以做: 注意,这是对父级的引用,但是super()是它的构造函数。
我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,
嘿,我正在尝试调用子类方法(ChildClass扩展了超类()) 它没有看到ChildClass方法,我只能调用SuperClass()中的方法,我知道这可能是一个愚蠢的问题,但无论如何干杯
问题内容: 我正在阅读Khalid Mughal 撰写的Java™SCJP认证程序员指南。 在“继承”一章中,它说明了 成员的继承与声明的可访问性紧密相关。如果超类成员可以通过子类中的简单名称来访问(不使用任何其他语法,如super),则该成员被视为继承的 它还提到静态方法不是继承的。但是下面的代码完全可以: 我如何直接在课堂上使用?甚至更多,也可以。 这本书的解释仅适用于实例方法吗? 问题答案: