Tengo dos llamadas a la función de los empleados y la clase DAO Dirección cuando puedo comprobar si el nombre del empleado o la dirección ya está en usado
Por lo que es genérico para comprobar y lanzar una excepción que he creado la siguiente función genérica
checkOrElseThrow en CommonUtil.java
public static <R, C, T extends Throwable> R checkOrElseThrow(R rtn, C chk, Supplier<? extends T> ex) throws T
{
if (chk != null)
{
throw ex.get();
}
return rtn;
}
y la función genérica anterior se ha llamado en EmployeeDAO.java y AddressDAO.java similares como se muestra a continuación
checkAndReturnEmployee en EmployeeDAO.java
public Employee checkAndReturnEmployee(Employee employee) {
return checkOrElseThrow(
employee,
employee.getAddressName(),
() -> new EntityNotFoundException("Employee already in use for another address"));
}
segunda dirección de giro cheque en AddressDAO.java
public Address checkAndReturnAddress(Address address) {
return checkOrElseThrow(
address,
address.getEmployeeName(),
() -> new EntityNotFoundException("Address already in use for another address"));
}
Pregunta
Mi solución está trabajando muy bien, pero me gustaría saber si hay alguna otra forma mejor para reescribir la función genérica ( checkOrElseThrow ) que he escrito
La mejor manera de escribir esto es no.
public Employee checkAndReturnEmployee(Employee employee) {
if (employee.getAddressName() == null) {
throw new EntityNotFoundException("Employee already in use for another address"));
}
return employee;
}
El código anterior es tan corta, pero mucho más fácil de leer. Es más claro cuál es la condición, y lo que sucede cuando no se cumple.
Su función personalizada sólo sirve para intentar crear una nueva sintaxis para Java, una que otra gente no va a entender, y es posible que pronto se olvide también.