删除 Java 中的逻辑重复
Removing logic duplication in Java
我有一个遗留代码,它根据 switch 语句中的大小写在不同的 类 上执行相同的工作。
是否可以减少下面switch语句中的代码逻辑重复?
我有 3 类 长颈鹿、猎犬和动物。 类 长颈鹿和猎犬都扩展了动物。
public class Animal {
int sleepDuration
int noOfLegs;
public setNoOfLegs(int noOfLegs) {
this.noOfLegs = noOfLegs;
}
public setSleepDuration(int sleepDuration) {
this.sleepDuration = sleepDuration
}
public getSleepDuration() {
return this.sleepDuration;
}
public getNoOfLegs() {
return this.noOfLegs;
}
}
class Hound extends Animal {
// some hound specific variables and functions here
}
class Giraffe extends Animal{
// some giraffe specific variables and functions here
}
public class Jungle {
public someMethod(String caseString) {
Animal animal = JacksonMapper.convertBytesToType(animalbyteContent, Animal.class);
switch (caseString) {
case "giraffe":
Giraffe giraffe = JacksonMapper.convertBytesToType(contentInBytes, Giraffe.class);
giraffe.setSleepDuration(animal.getSleepDuration);
giraffe.setNoOfLegs(animal.getNoOfLegs);
break;
case "hound":
Hound hound = JacksonMapper.convertBytesToType(contentInBytes, Hound.class);
hound.setSleepDuration(animal.getSleepDuration);
hound.setNoOfLegs(animal.getNoOfLegs);
break;
default :
log.error("Hurray!! You discovered a new animal species");
}
}
我不明白你为什么首先转换为 Animal,但无论如何,我可以推荐的最简单的重构是提取到方法。 setSleepDuration
和 setSleepDuration
是共享的,因此您可以创建一个接受两种动物的方法:
Giraffe giraffe = JacksonMapper.convertBytesToType(contentInBytes, Giraffe.class);
setAnimalFields(giraffe, animal);
setAnimalFields 在哪里
public void setAnimalFields(Animal newAnimal, Animal oldAnimal){
newAnimal.setSleepDuration(oldAnimal.getSleepDuration);
newAnimal.setNoOfLegs(oldAnimal.getNoOfLegs);
}
我有一个遗留代码,它根据 switch 语句中的大小写在不同的 类 上执行相同的工作。
是否可以减少下面switch语句中的代码逻辑重复?
我有 3 类 长颈鹿、猎犬和动物。 类 长颈鹿和猎犬都扩展了动物。
public class Animal {
int sleepDuration
int noOfLegs;
public setNoOfLegs(int noOfLegs) {
this.noOfLegs = noOfLegs;
}
public setSleepDuration(int sleepDuration) {
this.sleepDuration = sleepDuration
}
public getSleepDuration() {
return this.sleepDuration;
}
public getNoOfLegs() {
return this.noOfLegs;
}
}
class Hound extends Animal {
// some hound specific variables and functions here
}
class Giraffe extends Animal{
// some giraffe specific variables and functions here
}
public class Jungle {
public someMethod(String caseString) {
Animal animal = JacksonMapper.convertBytesToType(animalbyteContent, Animal.class);
switch (caseString) {
case "giraffe":
Giraffe giraffe = JacksonMapper.convertBytesToType(contentInBytes, Giraffe.class);
giraffe.setSleepDuration(animal.getSleepDuration);
giraffe.setNoOfLegs(animal.getNoOfLegs);
break;
case "hound":
Hound hound = JacksonMapper.convertBytesToType(contentInBytes, Hound.class);
hound.setSleepDuration(animal.getSleepDuration);
hound.setNoOfLegs(animal.getNoOfLegs);
break;
default :
log.error("Hurray!! You discovered a new animal species");
}
}
我不明白你为什么首先转换为 Animal,但无论如何,我可以推荐的最简单的重构是提取到方法。 setSleepDuration
和 setSleepDuration
是共享的,因此您可以创建一个接受两种动物的方法:
Giraffe giraffe = JacksonMapper.convertBytesToType(contentInBytes, Giraffe.class);
setAnimalFields(giraffe, animal);
setAnimalFields 在哪里
public void setAnimalFields(Animal newAnimal, Animal oldAnimal){
newAnimal.setSleepDuration(oldAnimal.getSleepDuration);
newAnimal.setNoOfLegs(oldAnimal.getNoOfLegs);
}