为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免由于代码重复而导致的重载?

如何避免由于代码重复而导致的重载?

UYOU 2022-07-14 16:42:29
我正在尝试将名称、散列密码、盐和散列类型插入数据库。唯一改变的是参数的类型。我相信它可以更有效地完成。如何避免使用重载?我需要使用泛型吗?谢谢你。插入方法protected void insert(String name, String secretpassword, String salt, String type){    String sql = "INSERT INTO login(username,password,salt,type) VALUES(?,?,?,?)";    try (Connection conn = this.connect();         PreparedStatement pstmt = conn.prepareStatement(sql)) {        pstmt.setString(1, name);        pstmt.setString(2, secretpassword);        pstmt.setString(3, salt);        pstmt.setString(4, type);        pstmt.executeUpdate();        System.out.println("Successful");    } catch (SQLException e) {        System.out.println(e.getMessage());    }}protected void insert(String name, byte[] secretpassword, String salt, String type){    String sql = "INSERT INTO login(username,password,salt,type) VALUES(?,?,?,?)";    try (Connection conn = this.connect();         PreparedStatement pstmt = conn.prepareStatement(sql)) {        pstmt.setString(1, name);        pstmt.setString(2, Arrays.toString(secretpassword));        pstmt.setString(3, salt);        pstmt.setString(4, type);        pstmt.executeUpdate();        System.out.println("Successful");    } catch (SQLException e) {        System.out.println(e.getMessage());    }}
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您可以从第二个方法调用第一个方法,例如:


protected void insert(String name, byte[] secretpassword, String salt, String type)

{

    insert(name, Arrays.toString(secretpassword), salt, type);

}


查看完整回答
反对 回复 2022-07-14
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我在这里没有看到太大的问题,因为您最终总是将密码作为字符串插入到您的login表中。所以,我建议总是使用第一个版本:


protected void insert(String name, String secretpassword, String salt,

    String type);

如果您将密码视为 a byte[],只需使用字符串的构造函数生成 a String:


byte[] array = ...;

String password = new String(array);

所以,为了清楚起见,我建议可能删除第二种方法,因为除了一个参数之外,它在数据库级别做同样的事情。


保留这两种方法意味着在您的代码库中进行更多的维护工作,因为如果您更改其中一种,您将不得不对另一种进行相同的逻辑更改。


查看完整回答
反对 回复 2022-07-14
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

想到了两种方法:


public String getValue(String value1) {

  return value1 + "0";

}


public String getValue(String value1, int num) {

  return value1 + String.valueOf(num);

}

选项 1:在两个都调用的方法中提取代码:


public String getValue(String value1) {

  return getMyValue(value1, 0);

}


public String getValue(String value1, int num) {

  return getMyValue(value1, num);

}


public String getMyValue(String val, int num) {

  return val + String.valueOf(num);

}

或者,选项 2,链接调用:


public String getValue(String value1) {

  return getValue(value1, 0);

}


public String getValue(String value1, int num) {

  return value1 + String.valueOf(num);

}

但是,就您而言,您应该真正问问自己是否需要这两种方法。


查看完整回答
反对 回复 2022-07-14
  • 3 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信