情况如下: 我得到了一个带有字段和方法的抽象类,并可以访问它们(AModule)。 我有另一个类扩展了这个抽象类(例如 TestModule),但我不知道/无法在父类(super class)中获取此子类的 java.lang.Class 实例,而不使用确切传递此实例的构造函数。 子类类型并不总是相同,这只是当前结果的示例:
public abstract class AModule
{
private Class<? extends AModule> clazz;
public AModule(Class<? extends AModule> clazz)
{
this.clazz = clazz;
//this.getClass() will return AModule.class
}
public Method resolve()
{
return this.clazz.getDeclaredMethods()[0];
//I want get the fields and methods; e.g. foo() of TestModule
}
}
public class TestModule extends AModule
{
public TestModule()
{
super( TestModule.class );
}
public void foo()
{
//code
}
}
public class ModuleLoader
{
public static void resolveModule(AModule module)
{
//at this point I don't know the class TestModule
//but I want to invoke foo()
module.resolve().invoke(module);
//module.getClass() will return AModule.class
}
}
我需要这个子类实例来获取所有字段和方法,以便通过反射来分析和调用它们,如注释所定义的。 有没有人有办法解决这个问题以恢复默认构造函数,而无需使用子类实例进行 super 调用?
提前致谢:)
最佳答案
其实很简单:
class Base {
void foo() {
... x = getClass();
和
class Child extends Base {
void bar() {
... x = getClass();
在两个方法foo()
和bar()
中...的结果 getClass()
是 this 的类。
换句话说:当您在 Base 对象上调用 foo/bar 时,getClass() 返回Base。如果在 Child 对象上调用,则在这两种方法中,结果都是 Child。
含义:只需使用 getClass()
而不是在该构造函数中硬编码类名!
关于java - 不使用构造函数获取子类的 java.lang.Class 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644646/