Java - Как выйти из метода без возврата, что он ожидает?

1

У меня есть метод, похожий на один ниже, где я хочу вернуть только приватную переменную одного класса, и только если некоторые условия будут проверены. В противном случае я хочу выйти из метода без возврата. Я пробовал что-то вроде кода ниже, но я боюсь, что возврат null - это не очень хорошая идея. Есть ли способ выйти из метода, такого как ключевое слово break для циклов?

private Classxpto classxpto;

public Classxpto getclassxpto(String abc, Date asd){
        String curr_abc= classxpto.getabc();
        Date curr_asd= classxpto.getasd();
            if("my conditions"){
                //dont return classxpto
                return null;
            }else if("my other conditions"){
                classxpto.setabc(abc);
                classxpto.setasd(asd);
                return classxpto;
            }
            return null;    
    }
  • 0
    аксессоры get не должны set значения напрямую, вместо этого используйте механизм событий. Он не должен контролировать, return или нет. (кроме вопроса безопасности)
  • 1
    @AdamBrave AdamBrave Дополнительный комментарий: вы можете изучить некоторые руководства по стилю кодирования Java - поскольку ваш код на самом деле не выглядит так, как 99% программистов на Java ожидают, что он будет выглядеть (особенно в отношении Caseness имен)
Показать ещё 3 комментария
Теги:
methods
exit

5 ответов

5

Вы можете либо вернуть null (или некоторый экземпляр Classxpto умолчанию), либо выбросить исключение. Выбрасывание исключения - единственный способ выйти из метода, имеющего невоенный возвращаемый тип, не возвращая ничего.

  • 1
    Я должен упомянуть здесь, что исключения не должны использоваться для управления потоком программы!
  • 1
    Да, Бинкан прав. Как только вы начнете использовать Exceptions для управления потоком программ, возникнет много проблем и плохой код. Если вы хотите указать, что значение не будет возвращено, верните ноль. Если вызов этого метода является действительной ошибкой, если условия не выполняются - другими словами, этого никогда не должно произойти, если все работает правильно, - тогда выдается Exception .
2

Вы не можете вернуть "ничего" из метода, если он не объявлен как метод void. (И в этом случае вы можете вернуть только "ничего"!)

Спецификация языка Java говорит об этом в §14.17:

Оператор return с выражением должен содержаться в одном из следующих или возникает ошибка времени компиляции:

  • Метод, объявленный для возврата значения
  • ...

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

  • Значение null часто используется для обозначения "no value", но вы можете использовать другие вещи... в зависимости от объявленного типа возврата.

  • Выброс исключений был бы плохим, чтобы справиться с этим, если только "нет результата" действительно является исключительным результатом. Использование исключений и обработка исключений для нормального управления потоком считается плохим дизайном на Java и может привести к серьезным проблемам с производительностью.

Теоретически возможно прекратить работу JVM, вызвав System.exit(...) или написать метод, чтобы он работал вечно или спал навсегда.Однако это, скорее всего, "нежелательное" поведение.

  • 0
    Нет ничего плохого в System.exit() , хотя бы в java был способ пометить метод как noexit
  • 0
    В контексте этого вопроса и этого ответа существует много ошибок при вызове System.exit() .
0

Если ваш метод сконструирован таким образом, что параметр возврата является необязательным, вы можете использовать новые необязательные механизмы в Java 8.

Вместо того, чтобы возвращать null, вы возвращаете необязательный.путь().

Для получения дополнительной информации посетите страницу https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html.

0

Метод либо возвращает ничего (void), либо что-то (включая null), но может throw Exception.

Вы должны думать о том, как клиенты класса будут использовать этот метод. Исключение действительно означает, что случай возврата не должен происходить в нормальных условиях.

Предполагая, что метод находится в классе Foo:

public class Foo {

   private ClassXPto classXPto;

   public ClassXPto getClassXPto() {...}

   // other Foo stuff
}

В клиентском коде:

Возвращение null

Foo foo; // initialized somewhere    
ClassXPto x = foo.getClassXPto("abc", new Date());
if (x != null) {
   // do something with x
}

Бросок/исключение исключения

Foo foo; // initialized somewhere    
try {
   ClassXPto x = foo.getClassXPto("abc", new Date());
   // do something with x
}
catch (WhatEverExceptionYouChoose e) {
   // process the exception
}

Распространение исключения

Foo foo; // initialized somewhere    
ClassXPto x = foo.getClassXPto("abc", new Date());
// do something with x. This point will be reached only
// if there is no exception thrown by getClassXPto()
0

Вы всегда можете выбросить исключение

if(conditionNotMet){

throw new YourCustomException();

}

то обрабатывайте его в любом случае, как вы хотите !!!!

  • 0
    Что бы я положил внутрь исключения? Я просто хочу выйти из метода, ничего не возвращая.
  • 0
    @Adam Храбрый Тогда thow ИНГ исключение не так , как вы должны принять
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню