【问题标题】:How to name two variables that have the same meaning but different types如何命名两个含义相同但类型不同的变量
【发布时间】:2017-08-25 13:13:34
【问题描述】:

我有一个解析字符串并将其转换为布尔值的方法。 合法值为“true”和“false”。

boolean convertStringToBoolean(String text) {
  if (text.equals("true") {
    return true;
  } else if (text.equals("false")) {
    return false;
  } else {
    throw new IllegalArgumentException(text);
  }
}

当我使用这个变量时,我遇到了命名问题。

void doSomething(String isSpecificReadString) {
  boolean isSpecificRead = convertStringToBoolean(isSpecificReadString);
  ...
}

问题是参数带有我想保留在其名称中的含义。 意义不会因为类型改变而改变。 到目前为止,我的解决方案只是将类型添加到参数的后缀。 但我不喜欢这种解决方案。

我应该怎样称呼变量来解决这个问题?

【问题讨论】:

  • 定义你从此方法调用的重载void doSomething(boolean isSpecificRead);或者您直接调用,如doSomething(convertStringToBoolean(text))
  • 这归结为见仁见智,因此对于 SO 来说是题外话。做你认为最简单、最清晰的事情,坚持不懈地去做,你会没事的。
  • 当然,问题是:为什么doSomething首先接受"true"/"false"String
  • @T.J.克劳德,wrt。我的问题是题外话,然后我不同意。是的,问题是基于意见的,但是有很多约定来处理命名。这个话题经常在 Java 书籍中讨论,使其成为一个值得解决的问题。我提出了一个具体的案例,我要求这样的约定。

标签: java naming-conventions naming


【解决方案1】:

到目前为止,我的解决方案只是将类型添加到参数的后缀。 但我不喜欢这种解决方案。

Java 的强类型语言以这种方式工作。
变量不能在运行时更改其类型。
您必须接受语言限制。

在方法中将数据从一种类型转换为另一种类型可能会产生此问题。
但是您的实际解决方案相当不错。
意图很明确,并且您为目标变量保留了一个自然名称。

您确实只为将要转换的输入(临时/中间变量)添加了类型后缀,而不是为将在下一个语句中使用的输出添加了类型后缀。

【讨论】:

    【解决方案2】:

    受 Andy Turner 的启发,我可以创建两个 doSomething 方法。 一个采用字符串的方法和另一个采用布尔值的方法。 String 方法然后可以调用布尔方法。 如下:

    void doSomething(String isSpecificRead) {
      doSomething(convertStringToBoolean(isSpecificReadString));
    }
    
    void doSomething(boolean isSpecificRead) {
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2020-12-09
      • 1970-01-01
      • 2013-12-04
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2021-05-08
      相关资源
      最近更新 更多