假设我有一个带有函数foo
public class Base
{
protected static void foo()
{
// ToDo - what is the name of the child class calling me?
}
}
并且至少有一个子类包含调用foo
的静态初始化
public class Child extends Base
{
static
{
foo();
}
}
有没有foo()
知道哪个孩子班级称呼它的方法?我假设有一种我可以使用的反射技术。
答案 0 :(得分:0)
最简单的方法是传递一个参数。例如
public class Base {
protected static void foo(Class<?> type) {
if (type == Child.class) {
}
}
}
public class Child extends Base {
static {
foo(Child.class);
}
}
但是,如果你需要做一些取决于子类的事情,那么我建议寻找一种利用抽象方法和多态的解决方案。
public Base {
protected static void foo(Base child) {
child.doFoo();
}
protected abstract void doFoo();
}
public Child extends Base {
static {
foo(new Child());
}
@Override
protected void doFoo() {
//do the child specific thing here
}
}
答案 1 :(得分:0)
您可以使用getClass
方法获取课程,例如:
o.getClass()
另外,如果你有一个c类,你需要检查o是否是c的实例,你可以使用instanceof
,如下所示:
o instanceof c
干杯。