Reflexión de Java (5) -Obtener herencia

Directorio: la
relación de herencia se puede obtener a través del objeto Class:

  • 1.Class getSuperclass (): obtiene el tipo de clase padre; (herencia única)
  • 2.Class [] getInterfaces (): obtiene todas las interfaces implementadas por la clase actual; (implementaciones múltiples)
  • 3. Mediante el método isAssignableFrom () del objeto Class, determine si se puede lograr la transformación ascendente de Class.

1. Obtenga el tipo de clase padre

public class Main {
    public static void main(String[] args) throws Exception {
        Class i = Integer.class;
        Class n = i.getSuperclass();
        System.out.println(n);
        Class o = n.getSuperclass();
        System.out.println(o);
        System.out.println(o.getSuperclass());
    }
}

Salida:

class java.lang.Number 
class java.lang.Object 
null 

La clase padre de Integer es Number, la clase padre de Number es Object y la clase padre de Object es nula. Excepto Object, cualquier clase que no sea de interfaz debe tener un tipo padre.

2. Obtenga todas las interfaces implementadas por la clase actual

public class Main {
    public static void main(String[] args) throws Exception {
        Class s = Integer.class;
        Class[] is = s.getInterfaces();
        for (Class i : is) {
            System.out.println(i);
        }
    }
}

Las interfaces implementadas por la salida Integer son:

java.lang.Comparable
java.lang.constant.Constable
java.lang.constant.ConstantDesc

3. Juzgar la transformación ascendente de la clase

En llamadas no reflexivas, cuando determinamos si una instancia es de cierto tipo, en circunstancias normales, usemos el operador instanceof:

Object n = Integer.valueOf(123);
boolean isDouble = n instanceof Double; // false
boolean isInteger = n instanceof Integer; // true
boolean isNumber = n instanceof Number; // true
boolean isSerializable = n instanceof java.io.Serializable; // true

Si se trata de dos instancias de clase, para determinar si una transformación ascendente es verdadera, puede llamar a isAssignableFrom ():

// Integer i = ?
Integer.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Integer
// Number n = ?
Number.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Number
// Object o = ?
Object.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Object
// Integer i = ?
Integer.class.isAssignableFrom(Number.class); // false,因为Number不能赋值给Integer

Fuente del blog:
https://www.liaoxuefeng.com/wiki/1252599548343744/1264804244564000

Supongo que te gusta

Origin www.cnblogs.com/JohnTeslaaa/p/12716964.html
Recomendado
Clasificación