当两个类几乎相似但包不同但功能相似时,Java 避免代码重复



我的项目中有一个文字代码,

private List<String> getAddressLines(PartyAddressDTO partyAddressDTO) {
List<String> addressLines = new ArrayList<>();
if (!CollectionUtils.isEmpty(partyAddressDTO.getAddressLines()))
addressLines.addAll(partyAddressDTO.getAddressLines().values());
if (addressLines.isEmpty()) {
if (!StringUtils.isEmpty(partyAddressDTO.getHouseNumber()))
addressLines.add(partyAddressDTO.getHouseNumber());
if (!StringUtils.isEmpty(partyAddressDTO.getStreet()))
addressLines.add(partyAddressDTO.getStreet());
if (!StringUtils.isEmpty(partyAddressDTO.getCity()))
addressLines.add(partyAddressDTO.getCity());
}
return addressLines;
}

这在三个不同的地方重复,我试图通过声纳分析,这是它显示为重复的地方,但问题是,

com.package.module1.party.PartyAddressDTO
com.package.module2.party.PartyAddressDTO
com.package.module3.party.PartyAddressDTO

在我们的三个不同的类中,这是导入,这三个都属于不同的包,我不明白为什么这些源模块被这样命名,而且我无法控制它们的对象,它们不扩展单个接口或任何东西,但是不得不在我的项目中复制一些代码行对我来说是很碍眼的。有没有办法提取这样的代码?

如果 PartyAddressDTO 类的属性/方法对于所有 3 个模块都是相同的,并且您对这些模块没有任何控制权,那么避免代码重复的最佳方法是拥有自己的实现,如下所示: (请忽略属性名称和方法名称(

public class MyPartyAddressDTO {
private String name;
private int age;
public MyPartyAddressDTO(package1.PartyAddressDTO partyAddressDTO1){
this.name = partyAddressDTO1.getName();
this.age = partyAddressDTO1.getAge();
}
public MyPartyAddressDTO(package2.PartyAddressDTO partyAddressDTO2){
this.name = partyAddressDTO2.getName();
this.age = partyAddressDTO2.getAge();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

并在整个应用程序中使用MyPartyAddressDTO

一般来说,我们会有一个公共模块和一个内部 pkg,将公共部分提取到那个地方。所有其他模块都将引用公共模块,但公共模块将由任何人引用,因此将避免循环依赖。将所有公共类移到那里,您可以避免重复。

最新更新