gpt4 book ai didi

java - 不使用构造函数获取子类的 java.lang.Class 实例

转载 作者:行者123 更新时间:2023-12-02 11:40:08 25 4
gpt4 key购买 nike

情况如下:我得到了一个带有字段和方法的抽象类,并可以访问它们(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com