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

Java语言是否保证在构造函数中应用于instanceof的{​​{1}}运算符或getclass()方法始终适用于层次结构中的较深类?

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

this

但是我想知道语言是否保证它会工作。

y5123768 回答:在构造函数中使用“ this instanceof…”或“ getClass()”是否安全?

是的,可以保证。

如果未显式指定super(),则构造函数的第一个动作始终是对Object的隐式调用。 (JLS

强制执行此约束(而不是允许在任何时候调用父构造函数)的原因是,可以确保所有超类均被初始化,无论是Object还是任何其他超类型。此时getClass的每个实例方法都可以安全使用; library(ggplot2) #fake data dat <- data.frame(dens = c(rnorm(100),rnorm(100,2,0.5)),group = rep(c("C","P"),each = 100)) #fill the area under the curve ggplot(dat,aes(x = dens,fill = group)) + geom_density(alpha = 0.75) 也不例外。

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

,

您的问题本质上是 哪个对象getClass被调用? JLS涵盖以下内容

关键字 this 只能在以下情况下使用:

  • 类的构造函数的主体(第8.8.7节)
  • ...

用作主要表达式时,关键字 this 表示 一个值,该值是对该对象的引用 实例方法或默认方法被调用(第15.12节), 或 正在构建的对象

本文链接:https://www.f2er.com/2703719.html

大家都在问