java - 直接从函数调用(没有 new())分配变量会引发异常吗?

标签 java

以下代码是一个大型项目的一部分。

概述是我正在尝试使用 Spring MVC 访问数据库。我想根据请求更新字段并发送关于数据库发回的值的响应。

代码:

@Override
@Transactional

public EmployeeResponse update(EmployeeRequest employeeRequest) {
    Employee emp = new Employee();
    UUID empId = UUID.fromString(employeeRequest.getId());
    Employee foundEmployee = employeeRepository.findOne(empId);

    if (foundEmployee != null) {
        foundEmployee.setAddress(employeeRequest.getAddress());
        // similarly set 4 fields of foundEmployee
        emp = employeeRepository.save(foundEmployee);
    }
    EmployeeResponse response = new EmployeeResponse();
    response.setAddress(emp.getAddress());
    // similarly set 4 fields of response

    return response;

}

我发现 foundEmployee 没有 new Employee(),而 emp 有。 我不确定,但我认为这会导致异常。 我说得对吗?

另外,请告诉我当 foundEmployeenull 时我应该抛出什么异常。

附加信息 - 这是帮助显示的内容:

org.​springframework.​data.​repository.​CrudRepository

public T findOne(ID id)

Retrieves an entity by its id.

Parameters:
id - must not be null.

Returns:
the entity with the given id or null if none found

Throws:
IllegalArgumentException - if id is null

最佳答案

行内

Employee foundEmployee = employeeRepository.findOne(empId);

我们可以假定 EmployeeRepository.findOne() 将返回 Employee 的实例。这不会导致编译器错误,如果在运行时发生异常,它会在 findOne() 中。

关于在 null foundEmployee 的情况下您应该做什么,这实际上是您必须做出的设计决定。一种选择是让方法返回 null,让消费者知道传入的 EmployeeRequest 存在严重问题。

另一种选择是创建您自己的 Exception,然后在 null foundEmployee 的情况下抛出它。

更新:

鉴于您需要将一些东西传回您的 UI,另一种选择是创建一个空的 EmployeeReponse 对象并返回它:

EmployeeResponse response = new EmployeeResponse();
response.setAddress(null);
response.setName(null);

确保您的框架可以将 null 值编码为用户友好的内容,例如所有字段的空字符串。

关于java - 直接从函数调用(没有 new())分配变量会引发异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055259/

相关文章:

java - 如何初始化自定义 JUNG 布局中的顶点位置?

java - 如何处理 BroadcastReceiver 中的多个警报

java - Linux调优Java并发性能

java - 无法从 SharedPreferences 获取数据

java - 缓存 javax.sql.Datasource 对象的单个实例是个好主意吗?

java - for循环只读取最后一个值

java - webView如何支持RTL文本?

java - 如何在 Hibernate 中使用单独的队列填充实体的字段?

Tomcat,两个Java版本和 "invalid constant type: 18"

java - 与延迟加载一对一关系的 n+1 问题