gpt4 book ai didi

java - 是否可以在调用 super() 之前访问 this.getClass()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:29 27 4
gpt4 key购买 nike

我想在使用 super(...) 调用构造函数之前调用 this.getClass()

abstract class A extends SuperClass {
public A() {
super(Manager.someOtherMethod(this.getClass()))
// Does not work: "Cannot reference 'Object.getClass()' before
// supertype constructor has been called".
}
}

我阅读了有关使用静态方法的解决方法,但无法从静态上下文调用 this.getClass()

This question depends on my previous question.

提前感谢您的回答:)

最佳答案

虽然我怀疑是否需要这样做,但您可以通过将对 Manager.someOtherMethod 的调用插入到父类(super class)的构造函数中来实现:

class SuperClass {
SuperClass() {
Object result = Manager.someOtherMethod(this.getClass());
}
}

class A extends SuperClass {}

class Manager {
static Object someOtherMethod(Class<?> clazz) {
System.out.println(clazz);
return new Object();
}
}

打印出来

class A

(如果您创建了 A 的实例)

Ideone demo


如果 SuperClass 有多个构造函数,您可以将结果分配给父类(super class)中的一个字段:

class SuperClass {
private final Object result = Manager.someOtherMethod(this.getClass());

SuperClass() { ... }

SuperClass(String someParameter) { ... }
}

然后 result 将在两个构造函数中可用。

关于java - 是否可以在调用 super() 之前访问 this.getClass(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293754/

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