标识调用基类静态函数的子类

时间:2014-04-25 14:43:51

标签: java

假设我有一个带有函数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()知道哪个孩子班级称呼它的方法?我假设有一种我可以使用的反射技术。

2 个答案:

答案 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

干杯。