В учебных целях делаю приложение которое собирает строку (банковский счёт)
из разных значений согласно этой таблице первые 3 символа счёта я беру из первого enum:
public enum FirstPrimaryCode {
DEBIT("408"),
ACCUM("423"),
CREDIT("454"),
BANK("474");
private final String code;
FirstPrimaryCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
Для 2ух последующих цифр кода мне пришлось сделать 4 разных enum
,
так как на разных типов счетов есть совпадающий код имеющий разные
назначения.
public enum AccumSecondaryCode {
ON_DEMAND("01"),
UP_TO_ONE_YEAR("05"),
UP_TO_THREE_YEARS("06"),
MORE_THREE_YEARS("07");
private final String code;
AccumSecondaryCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
public enum CreditSecondaryCode {
UP_TO_ONE_YEAR("04"),
UP_TO_THREE_YEARS("05"),
MORE_THREE_YEARS("06");
private final String code;
CreditSecondaryCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
В этих 2ух enam
можно увидеть совпадающий код, которые принадлежит к разным назначениям счетов.
Подскажите как правильней реализовать данную операцию, конечно в моих масштабах достаточно и такой реализации, но всё-же хотелось бы разобраться в этом вопросе.
Мне кажется енамы тут немного неправильно применены. Мне в голову приходит примерная такая идея
class FirstPrimaryCode {
public static Debit debit() {
return new Debit("408");
}
public static Accum accum() {
return new Accum("423");
}
// другие методы
}
class Debit {
private StringBuilder code;
public Debit(String code) {
this.code = new StringBuilder(code);
}
public DebitSecondaryCode onDemand() {
code.append("01");
return new DebitSecondaryCode(code);
}
public DebitSecondaryCode upToOneYear() {
code.append("05");
return new DebitSecondaryCode(code);
}
}
class Accum {
private StringBuilder code;
public Accum(String code) {
this.code = new StringBuilder(code);
}
public AccumSecondaryCode upToOneYear() {
code.append("04");
return new AccumSecondaryCode(code);
}
}
class DebitSecondaryCode {
private StringBuilder code;
public DebitSecondaryCode(StringBuilder code) {
this.code = code;
}
}
class AccumSecondaryCode {
private StringBuilder code;
public AccumSecondaryCode(StringBuilder code) {
this.code = code;
}
}
То есть, созданы классы держатели кода и каждый вызванный метод будет добавлять новые числа к коду. Составить нужную строку потом можно будет примерно таким образом
FirstPrimaryCode
.debit()
.onDemand()
.thirdStep
.fourthStep
.get();
На последнем этапе должен возвращаться объект реализующий какой-то интерфейс Code, где будет реализован метод get.
Поскольку каждый этап реализован в виде класса,то вызвать неправильный метод невозможно. Нельзя вызвать дважды debit() или acuum и потом onDemand и нельзя вручную его редактировать.
Может и не то что вам надо, но как вариант прошу рассмотреть
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как правильно обрабатывать RuntimeException? Например, у меня есть следующий код:
Регистрирую в приложении нового пользователяЕму присваивается id