java - 我面临声纳建议问题,即 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()
。
有人可以帮忙吗?
解决方案
不要使用数组来传递具有不同语义的多个对象。
它非常容易出错。
而不是在类中提取具有高内聚性的参数: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));
推荐阅读
- layout - 更改 BigBlueButton HTML 5 客户端布局
- php - 在 docker 容器中启用 mysqli
- sql - 使用 ROW_NUMBER () OVER 获取停止号时出现问题 - DB2
- python - 使用 Python 多处理(Pickle 错误)并行处理具有不可序列化依赖项的函数的正确方法?
- angularjs - 替换 md-select 分隔符
- c# - 动态链接导致注销
- reactjs - 如何将 azure AD 令牌从 url 获取到 react 组件?
- python-3.x - 提取两个特定单元格之间的行 pandas
- samesite - 使用 SameSite=Strict 的重定向链接导致超时
- ruby-on-rails - 如何阻止任务 ruby 运行?