¿Es seguro utilizar "este instanceof ..." o "getClass ()" en un constructor?

Julien Royer:

¿Garantiza el lenguaje Java que el instanceofoperador o el getClass()método aplicado a thisen un constructor siempre se aplica a la clase más profunda en la jerarquía?

Por ejemplo, si quiero limitar las subclases que se permite llamar a un constructor de la superclase, que podría hacer esto:

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

pero me pregunto si las garantías del lenguaje que va a funcionar o no.

Miguel :

Sí, está garantizado.

Hay un siempre una llamada implícita a super()como la primera acción del constructor si no se especifica explícitamente una. ( JLS )

La razón de esta restricción se aplica - en lugar de permitir al constructor padre para ser llamado en cualquier momento - es por lo que todas las clases súper están garantizados para ser inicializado, ya sea Object, o cualquier otro tipo de super. Cada método de instancia de Objectes seguro de usar en este punto; getClassno es una excepción.

Véase también ¿Por qué este () y super () tiene que ser la primera instrucción de un constructor?

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=459090&siteId=1
Recomendado
Clasificación