gpt4 book ai didi

java - 在我的例子中,我有什么选择来防止 Java 中的重复代码

转载 作者:行者123 更新时间:2023-12-02 10:26:04 25 4
gpt4 key购买 nike

我有大约 6 个类,它们用不同的值做“几乎”相同的事情。我将在下面提供两个类(class)和一个示例,然后描述我正在做的事情。

    public class AttributeRangeRule implements Template {
@Override
public String writeTemplate(BusinessRule businessRule) throws Exception {

String link = TemplateReader.getInstance().getLinkToQuery(businessRule.getBusinessRuleTypeCode());
String template = TemplateReader.getInstance().readQuery(link);
ST templateFixer = new ST(template);
templateFixer.add("code", businessRule.getBusinessRuleTypeCode());
templateFixer.add("attribute_table", businessRule.getListOfTables().get(0).getName());
templateFixer.add("operator", businessRule.getOperator().getName());
templateFixer.add("range_min", businessRule.getListOfValues().get(0).getValue());
templateFixer.add("range_max", businessRule.getListOfValues().get(1).getValue());
templateFixer.add("attribute_column", businessRule.getListOfColumns().get(0).getName());
templateFixer.add("error", businessRule.getErrorMessage());
templateFixer.add("GreaterOrEqual", ">=");
templateFixer.add("LessOrEqual", "<=");
templateFixer.add("LessThen", "<");
templateFixer.add("GreaterThen", ">");
String templateDLL = templateFixer.render();
return templateDLL;

}
}


public class AttributeCompareRule implements Template {
@Override
public String writeTemplate(BusinessRule businessRule) throws Exception {

String link = TemplateReader.getInstance().getLinkToQuery(businessRule.getBusinessRuleTypeCode());
String template = TemplateReader.getInstance().readQuery(link);
ST templateFixer = new ST(template);
templateFixer.add("code", businessRule.getBusinessRuleTypeCode());
templateFixer.add("attribute_table", businessRule.getListOfTables().get(0).getName());
templateFixer.add("operand", businessRule.getOperator().getName());
templateFixer.add("compare_with", businessRule.getListOfValues().get(0).getValue());
templateFixer.add("error", businessRule.getErrorMessage());
String templateDLL = templateFixer.render();
return templateDLL;

}
}

templateFixer.add("code..") 是重复的。它们在两个类中的写法相同,但值不同。

我有不同的类,它们具有 writeTemplate() 方法的不同实现。正如您所看到的,AttributeRangeRule 与 AttributeCompareRule 不同。这段代码正在为我编写一个查询。 Intellij 告诉我,即使值不唯一,代码也是重复的。我不知道如何解决这个问题。我该如何解决这个问题,因为重复的代码并不是最好的代码。提前致谢。

最佳答案

您应该尝试利用此处的OOPS概念并在此处使用继承

您可以创建一个名为 AttributeRule 的基类,它重写 writeTemplate() 方法,并将所有冗余代码放入其中,并让您的子类扩展该类,即 AttributeCompareRuleAttributeCompareRule

这是概念想法和一些片段

public class AttributeRule implements Template {

@Override
public String writeTemplate(BusinessRule businessRule) throws Exception {
String link = TemplateReader.getInstance().getLinkToQuery(businessRule.getBusinessRuleTypeCode());
String template = TemplateReader.getInstance().readQuery(link);
ST templateFixer = new ST(template);
templateFixer.add("code", businessRule.getBusinessRuleTypeCode());
templateFixer.add("attribute_table", businessRule.getListOfTables().get(0).getName());
}
}

public class AttributeCompareRule extends AttributeRule {

@Override
public String writeTemplate(BusinessRule businessRule) throws Exception {
super.writeTemplate(rule);
// Custom class code here
templateFixer.add("operand", businessRule.getOperator().getName());
templateFixer.add("compare_with", businessRule.getListOfValues().get(0).getValue());
templateFixer.add("error", businessRule.getErrorMessage());
String templateDLL = templateFixer.render();
return templateDLL;
}
}

public class AttributeRangeRule extends AttributeRule {
super.writeTemplate(rule);
// Custom class code here
}

关于java - 在我的例子中,我有什么选择来防止 Java 中的重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53950865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com