【问题标题】:Changing value of an object parameter in Java在 Java 中更改对象参数的值
【发布时间】:2018-05-10 07:06:11
【问题描述】:

我有一个代码,我在每个 Rest Service 上重复这样的代码:

user = getUserByToken(request.getToken());
if (user == null) {
    response = this.buidResponse(Response.status(Status.UNAUTHORIZED));
}else{
    do things...
} 
return response;

我想创建一个方法来避免重复前 4 行,例如:

bool validateUser(String token, User userOut, Response responseOut){
    userOut = getUserByToken(token);
    if (userOut == null) {
        responseOut = this.buidResponse(Response.status(Status.UNAUTHORIZED));
    return false;
  }
  return true;

}

但是就像在Java中参数是通过value-ref传递的一样,参数在方法之外并不维护它的值...

我有什么选择?

【问题讨论】:

  • responseOut 是一个局部变量,就像所有方法参数一样。 Java 没有输出参数的概念。
  • 解决这个问题的最简单方法是传递一个容器(如数组)作为参数,并修改容器的内容。但在这种情况下,您可以只从您的方法返回响应,而不是布尔值。

标签: java parameter-passing


【解决方案1】:

您可以创建一个包装类 MyDTO 并将参数保留为字段。 请参考以下代码:

  class MyDTO{
      String token;
      User userOut;
      Response responseOut;

    public String getToken() {
      return token;
    }

    public void setToken(String token) {
      this.token = token;
    }

    public String getUserOut() {
      return userOut;
    }

    public void setUserOut(String userOut) {
      this.userOut = userOut;
    }

    public Response getResponseOut() {
      return responseOut;
    }

    public void setResponseOut(Response responseOut) {
      this.responseOut = responseOut;
    }
  }

bool validateUser(MyDTO dto){
    dto.setUserOut(getUserByToken(dto.getToken()));
    if (dto.getUserOut() == null) {
        dto.setResponseOut(this.buidResponse(Response.status(Status.UNAUTHORIZED)));
    return false;
  }
  return true;
}

【讨论】:

  • 我想到了那个选项,但由于我需要在方法的其他部分同时使用用户和响应,我认为这个选项不会使代码更清晰/更快。无论如何,谢谢,因为这是一种有效的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
相关资源
最近更新 更多