猿问

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

我正在尝试将名称、散列密码、盐和散列类型插入数据库。唯一改变的是参数的类型。我相信它可以更有效地完成。如何避免使用重载?我需要使用泛型吗?谢谢你。


插入方法


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());

    }

}


UYOU
浏览 118回答 3
3回答

明月笑刀无情

您可以从第二个方法调用第一个方法,例如:protected void insert(String name, byte[] secretpassword, String salt, String type){    insert(name, Arrays.toString(secretpassword), salt, type);}

慕码人8056858

我在这里没有看到太大的问题,因为您最终总是将密码作为字符串插入到您的login表中。所以,我建议总是使用第一个版本:protected void insert(String name, String secretpassword, String salt,    String type);如果您将密码视为 a byte[],只需使用字符串的构造函数生成 a String:byte[] array = ...;String password = new String(array);所以,为了清楚起见,我建议可能删除第二种方法,因为除了一个参数之外,它在数据库级别做同样的事情。保留这两种方法意味着在您的代码库中进行更多的维护工作,因为如果您更改其中一种,您将不得不对另一种进行相同的逻辑更改。

慕尼黑8549860

想到了两种方法: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);}但是,就您而言,您应该真正问问自己是否需要这两种方法。
随时随地看视频慕课网APP

相关分类

Java
我要回答