gpt4 book ai didi

java - 在构造函数中使用 "this instanceof …"或 "getClass()"是否安全?

转载 作者:行者123 更新时间:2023-12-02 07:41:39 24 4
gpt4 key购买 nike

Java 语言是否保证构造函数中应用于 thisinstanceof 运算符或 getClass() 方法始终适用于更深层的对象?层次结构中的类?

例如,如果我想限制允许从父类(super class)调用构造函数的子类,我可以这样做:

class A {
A() {
final Class<?> clazz = getClass();
if (clazz != A.class && clazz != B.class && clazz != C.class) {
throw new IllegalStateException();
}
}
}

但我想知道该语言是否能保证它能正常工作。

最佳答案

是的,这是有保证的。

如果您没有显式指定,则始终会隐式调用 super() 作为构造函数的第一个操作。 (JLS)

强制执行此约束的原因 - 而不是允许在任何时候调用父构造函数 - 是为了保证所有父类(super class)都被初始化,无论是 Object 还是任何其他 super 类型。此时,Object 的每个实例方法都可以安全使用; getClass 也不异常(exception)。

另请参阅Why do this() and super() have to be the first statement in a constructor?

关于java - 在构造函数中使用 "this instanceof …"或 "getClass()"是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59936060/

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