Excepción de conversión de tipo ClassCastException en Java (tutorial de solución detallada)

I. Introducción

Recientemente, muchos amigos que son principiantes en Java, incluso aquellos que han aprendido la etapa de JavaWeb y el marco, vinieron a preguntarle a Qian Fengjian: ¿Cómo resolver la conversión de tipo anormal de ClassCastException en Java? Para resolver este problema relativamente común para todos, el hermano Jian está aquí hoy, enseñándole cómo analizar y resolver esta excepción paso a paso. Espero que pueda resolverlo fácilmente cuando encuentre problemas similares en el futuro.

2. Fenómenos anormales

Echemos un vistazo a esta ClassCastException de excepción de conversión de tipo simple y frecuente. En primer lugar, tenemos que hacer tal excepción.Después de que se ejecute el siguiente código, se lanzará una excepción de conversión de tipo ClassCastException.

  1. Código de la interfaz del profesor
package com.qf.pojo;

/**
 * @author 千锋健哥
 */
public interface Teacher {

    /**
     * 输入学科名字, 返回讲师可以讲哪些科目内容
     * @param subject
     * @return
     */
    public String teach(String subject);
}

2. Código de clase de implementación de JavaTeacher

package com.qf.pojo;

/**
 * Java学科讲师实现类
 * @author 千锋健哥
 */
public class JavaTeacher implements Teacher {

    @Override
    public String teach(String subject) {
        return subject + "学科讲师, 可以讲业界最流行的分布式微服务架构, 以及企业解决方案";
    }
}

3. Código de clase de implementación de H5Teacher

package com.qf.pojo;

/**
 * H5讲师实现类
 * @author 千锋健哥
 */
public class H5Teacher implements Teacher{

    @Override
    public String teach(String subject) {
        return subject + "学科讲师, 可以讲html, css, javascript";
    }
}

4. Código de prueba

package test;

package com.qf.test;

import com.qf.pojo.H5Teacher;
import com.qf.pojo.JavaTeacher;
import com.qf.pojo.Teacher;

/**
 * 测试类型转换异常
 * @author 千锋健哥
 */
public class TestCastException {

    public static void main(String[] args) {
        Teacher teacher1 = new JavaTeacher();
        Teacher teacher2 = new H5Teacher();
        System.out.println("======" + teacher1.teach("JavaEE"));
        System.out.println("======" + teacher2.teach("H5"));

        //向下转型, 正常转型
        JavaTeacher javaTeacher = (JavaTeacher)teacher1;
        //向下转型, ClassCastException异常
        H5Teacher h5Teacher = (H5Teacher)teacher1;

    }
}

5. Ejecución de resultados

 Después de ejecutar el código anterior, se genera la excepción de conversión de tipo que se muestra en la figura anterior, entonces, ¿cómo ocurrió este problema y cómo resolverlo? ¡Sigamos leyendo!

3. Causa anormal

A continuación, el hermano Jian primero le explicará la causa de esta excepción:

A juzgar por el ejemplo que diseñamos anteriormente, java.lang.ClassCastException es una excepción generada durante la conversión de tipo obligatoria. La premisa de la conversión de tipo obligatoria es que solo cuando el tipo de objeto al que apunta la referencia de clase principal es una subclase, se puede realizar la conversión de tipo obligatoria. Entonces, si el tipo de objeto al que apunta la referencia de la clase principal no es una subclase, se generará una java.lang.ClassCastException.

Por ejemplo: JavaTeacher javaTeacher = (JavaTeacher)teacher1; se puede convertir normalmente, porque el tipo de teacher1 es el tipo de JavaTeacher.

H5Teacher h5Teacher = (H5Teacher)teacher1; Ocurrirá una excepción, porque teacher1 es un tipo JavaTeacher, no un tipo H5Teacher, y los tipos no coinciden, por lo que se generará una java.lang.ClassCastException.

¿Ahora entiende por qué hay una excepción ClassCastException? Entonces como solucionarlo?

4. Soluciones

Ahora que hemos encontrado la causa del problema, se puede resolver fácilmente a continuación:

Cuando se encuentre con una excepción de este tipo, si conoce el tipo específico del objeto al que se accede, puede convertirlo directamente a ese tipo;

Por ejemplo: H5Teacher h5Teacher = (H5Teacher)teacher1; este código se puede cambiar a H5Teacher h5Teacher = (H5Teacher)teacher2, porque el tipo de teacher2 es el tipo de H5Teacher.

conclusión V

La llamada excepción de conversión de tipo ClassCastException es en realidad una falta de coincidencia entre el tipo convertido.Solo necesitamos cambiar directamente el tipo del objeto al que se hace referencia y el tipo del objeto convertido al mismo tipo para resolverlo perfectamente. ¿Entiendes ahora? Si tienes otras preguntas, puedes dejar un mensaje en el área de comentarios o mensaje privado.

Aquí recomiendo un conjunto de tutoriales en video para comenzar con Java (tecnología central de Java, adecuada para la base cero de Java, necesaria para el autoaprendizaje de Java), los amigos que lo necesiten pueden aprender.

Supongo que te gusta

Origin blog.csdn.net/GUDUzhongliang/article/details/131805028
Recomendado
Clasificación