es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excepción de puntero nulo en el valor predeterminado de Kotlin.

Tengo un código como este:

@Service
class SomeClass (
    private val departmentClient : DepartmentClient
) {
    fun someFunction(
        employee: Employee,
        department: Department = departmentClient.getById(employee.departmentId)
    ): Unit {
        aquí mi código
    }
}

data class Employee(val departmentId: Long, val id: Long)
data class Department(val id: Long)

@Service
class DepartmentClient() {
    fun getById(id: Long): Department
}

Cuando no paso el parámetro “department” en someFunction, espero que se llame a “departmentClient.getById(employee.departmentId)”. El problema es que en algunos casos obtengo una excepción de puntero nulo en esta línea, pero en otros no. Todas las dependencias son inyectadas por Spring.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La excepción de puntero nulo puede ocurrir si el objeto departmentClient no se instancia correctamente antes de llamar al método someFunction. Para asegurarse de que se inicializa correctamente, puede agregar el modificador lateinit a la propiedad departmentClient:

    @Service
    class SomeClass (
        private lateinit var departmentClient: DepartmentClient
    ) {
        // resto del código
    }
    

    Esto retrasará la creación del objeto departmentClient hasta que se acceda por primera vez.

    Otra razón para la excepción de puntero nulo es que el método getById en la clase DepartmentClient está devolviendo un valor nulo. Puede agregar comprobaciones de nulos para evitar esto:

    @Service
    class SomeClass (
        private val departmentClient: DepartmentClient
    ) {
        fun someFunction(
            employee: Employee,
            department: Department? = departmentClient.getById(employee.departmentId)
        ) {
            department?.let {
                // aquí va tu código
            } ?: throw IllegalArgumentException("No se encontró el departamento para el empleado $employee")
        }
    }
    
    @Service
    class DepartmentClient() {
        fun getById(id: Long): Department? {
            // tu código para obtener el departamento por ID
        }
    }
    

    Al agregar una comprobación de nulos al parámetro department en someFunction, puede evitar que ocurra la excepción de puntero nulo. Además, podría lanzar una excepción en caso de que no se encuentre el departamento para el empleado.

Comments are closed.