I am refactoring a part of big old system developed in Java. I came across a situation where we are migrating some data types, and there will be use of both types. For compatibility, as all the old part will remain using id
as an int
, I simply overloaded the constructor, and the old getter now parse a integer value.
The thing is, how is the proper way to compare this data? Does this way make any sense, or is there a simpler way to compare it, considering that id
can be both, a number or a word.
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class SomeItem implements Comparable<SomeItem> {
private String id;
public SomeItem(String id) {
this.id = id;
}
public SomeItem(int no) {
this(String.valueOf(no));
}
public String getId() {
return id;
}
public int getNo() {
return Integer.parseInt(id);
}
@Override
public int compareTo(SomeItem that) {
if (StringUtils.isNumeric(this.getId()) && StringUtils.isNumeric(that.getId())) {
return this.getNo() - that.getNo();
} else {
return this.getId().compareTo(that.getId());
}
}
}
getNo()
, and the new parts will callgetId()
? \$\endgroup\$getNo
) as it's to massive for a total refactor at the moment, and everything that it's new will be usinggetId()
\$\endgroup\$SomeItem
via theint
-based constructor, wouldn't that already solve your problem insidecompareTo(SomeItem)
? \$\endgroup\$