Как изменить параметр, если в подклассе java выбрано исключение класса - PullRequest
1 голос
/ 16 июня 2020

Это действительно кажется странным вопросом, но на самом деле я не мог придумать лучшего способа задать его. Я создал класс под названием Brand, который генерирует исключение недопустимого имени, когда имя имеет значение null или пусто, точно так же (только конструктор):

public Brand(String name, String producer, String region) throws ExInvalidBrand {
    if (name == null || name.equals("")) {
        throw new ExInvalidBrand("Brand name cannot be empty or null!");
    }
    this.name = name;
    this.producer = producer;
    this.region = region;
}

Теперь мне нужно создать подкласс из этого, который должен генерировать то же исключение, но при его выдаче должен изменить свое имя на "White Brand". Конструктор подкласса:

public CommercialBrand(String name, String producer, String region) throws ExInvalidBrand{
    super(name, producer, region);
}

Как я вижу, мне нужно использовать ключевое слово super, поэтому я фактически наследую их переменные. Подкласс генерирует Exception, как и ожидалось, когда имя пусто.

Единственный известный мне способ - это создать новый конструктор в основном классе, который не запрашивает имя, а затем вызвать его в подклассе, также создайте новое имя частной переменной и попробуйте / отловите там исключение.

Можно ли это сделать с помощью конструктора, который у меня есть прямо сейчас?

Это действительно странный вопрос, я Я счастлив прояснить все, что могу по этому поводу.

РЕДАКТИРОВАТЬ: Я заметил, что, вероятно, я плохо объяснил себя.

Представьте, что у нас есть этот psvm:

public static void main(String[] args) throws ExInvalidBrand {
    Brand br = new Brand("brand1", "producer1", "region1"); //here an object is created with the name = brand1, producer = producer1 and region = region1
    CommercialBrand cb = new CommercialBrand("brand1", "producer1" , "region1"); // same as above, but now from the subclass.
    CommercialBrand cbWithNoName = CommercialBrand("", "producer1", "region1"); 
}

Это то, что я хочу. Когда это происходит, тем не менее следует создать объект cbWithNoName и присвоить ему имя «Белая марка» при возникновении исключения. Было бы здорово попробовать / поймать перед супер, что-то вроде этого, , если бы это было возможно, что не , насколько я знаю.

public MarcaComercial(String name, String producer, String region) throws ExInvalidBrand{
    try {
        super(name, producer, region);
    } catch (ExMarcaInvalida ex) {
        super("WhiteBrand", producer, region);
    }
}

1 Ответ

1 голос
/ 16 июня 2020

Вы можете использовать тернарный оператор при вызове super() в конструкторе CommercialBrand.

public CommercialBrand(String name, String producer, String region) throws Exception {
    super((name == null || name.equals("") ? "WhiteBrand" : name), producer, region);
}
...