首页 > 解决方案 > 我面临声纳建议问题,即 Method 有 8 个参数,大于我的代码中授权的 7 个参数

问题描述

我在下面的代码中面临声纳问题。

声纳建议 Method 有 8 个参数,大于 7 个授权。那么我们如何通过将这些参数放入数组或映射中来解决这个问题呢?

private void appendSchemeSpecificPart(StringBuilder sb,
    String opaquePart,
    String authority,
    String userInfo,
    String host,
    int port,
    String path,
    String query
)

我无法制作数组并将其传递给此方法appendSchemeSpecificPart()

有人可以帮忙吗?

标签: java

解决方案


不要使用数组来传递具有不同语义的多个对象。
它非常容易出错。
而不是在类中提取具有高内聚性的参数:SchemeSpecificPart并将其定义为参数,例如:

void appendSchemeSpecificPart(StringBuilder sb, SchemeSpecificPart schemeSpecificPart){..}  

StringBuilder不是SchemeSpecificPart概念的一部分。所以我们不会在里面定义它。

现在您可以调用您的方法:

StringBuilder sb = ...;
SchemeSpecificPart part = ...;
appendSchemeSpecificPart(sb, part);  

不是您的问题,但请注意,StringBuilder sb通过调用的方法修改参数状态(此处)是一种不安全的方法。
它赋予该appendSchemeSpecificPart()方法比它需要的更多的责任。例如,该方法可以删除现有内容,sb而它不应该这样做)并且它也可能更难理解每个接受 的方法StringBuilder实际上做了什么,因为所有方法都可以覆盖前一个所做的事情。

返回一个字符串看起来更清晰和健壮:

String computeSchemeSpecificPart(SchemeSpecificPart schemeSpecificPart){...}

并使用它:

SchemeSpecificPart part = ...;
StringBuilder sb = ...;  
sb.append(computeSchemeSpecificPart(part));

推荐阅读