Java-如何退出一个方法而不返回他期望的结果?

Java-如何退出一个方法而不返回他期望的结果?,java,methods,exit,Java,Methods,Exit,我有一个类似于下面的方法,我只想返回一个类的私有变量,并且只有在某些条件得到验证的情况下。否则我想退出该方法而不返回任何内容。我尝试过下面的代码,但我担心返回null不是一个好主意。有没有办法退出像break关键字这样的循环有效的方法 private Classxpto classxpto; public Classxpto getclassxpto(String abc, Date asd){ String curr_abc= classxpto.getabc();

我有一个类似于下面的方法,我只想返回一个类的私有变量,并且只有在某些条件得到验证的情况下。否则我想退出该方法而不返回任何内容。我尝试过下面的代码,但我担心返回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;    
    }

您可以返回null或一些默认的Classxpto实例,也可以抛出异常。抛出异常是退出具有非void返回类型的方法而不返回任何内容的唯一方法。

您可以返回null或某个默认Classxpto实例,也可以抛出异常。抛出异常是退出具有非void返回类型的方法而不返回任何内容的唯一方法。

您始终可以抛出异常

if(conditionNotMet){

throw new YourCustomException();

}

然后用你想要的任何方式处理它

您始终可以抛出异常

if(conditionNotMet){

throw new YourCustomException();

}

然后用你想要的任何方式处理它

除非方法声明为void方法,否则无法从该方法返回任何内容。在这种情况下,你只能什么也不归还

Java语言规范在以下方面说明了这一点:

带有表达式的return语句必须包含在下列语句之一中,否则会发生编译时错误:

声明为返回值的方法 .... 如果您没有要返回的值,那么您可以选择选择对应用程序来说没有值的值,或者抛出异常

值null通常用于表示没有值,但您可以使用其他东西。。。取决于声明的返回类型

抛出异常将是一个糟糕的处理方法,除非没有结果是真正的异常结果。在Java中,将异常和异常处理用于正常的流控制被认为是一种糟糕的设计,并且容易导致严重的性能问题


从理论上讲,也可以通过调用System.exit…(系统退出…)来终止JVM,或者编写方法使其永远运行或永远休眠。但是,这些很可能是不受欢迎的行为。

除非方法声明为void方法,否则无法从该方法返回任何内容。在这种情况下,你只能什么也不归还

Java语言规范在以下方面说明了这一点:

带有表达式的return语句必须包含在下列语句之一中,否则会发生编译时错误:

声明为返回值的方法 .... 如果您没有要返回的值,那么您可以选择选择对应用程序来说没有值的值,或者抛出异常

值null通常用于表示没有值,但您可以使用其他东西。。。取决于声明的返回类型

抛出异常将是一个糟糕的处理方法,除非没有结果是真正的异常结果。在Java中,将异常和异常处理用于正常的流控制被认为是一种糟糕的设计,并且容易导致严重的性能问题

从理论上讲,也可以通过调用System.exit…(系统退出…)来终止JVM,或者编写方法使其永远运行或永远休眠。然而,这些很可能是不受欢迎的行为。

方法要么不返回任何void,要么返回包含null的内容,但可以抛出异常

您必须考虑类的客户端将如何使用该方法。例外情况实际上意味着在正常情况下不应出现不返回的情况

假设该方法位于Foo类中:

在客户端代码中:

返回空值 正在引发/捕获异常 传播异常 方法要么不返回任何void,要么返回包含null的内容,但可以引发异常

您必须考虑类的客户端将如何使用该方法。例外情况实际上意味着在正常情况下不应出现不返回的情况

假设该方法位于Foo类中:

在客户端代码中:

返回空值 正在引发/捕获异常 传播异常
如果您的方法设计为返回参数是可选的,那么您可以使用Java8中新的可选机制

您将返回Optional.empty,而不是返回null


有关更多信息,请访问

如果您的方法设计为返回参数是可选的,则可以使用Java 8中新的可选机制

您将返回Optional.empty,而不是返回null


有关更多信息,请访问

我应该在这里提到,不应使用异常来控制程序流!是的,@Binkan是对的。一旦开始使用异常来控制程序流,就会出现很多问题和错误代码。如果要指示没有要返回的值,则返回null。如果调用此方法是一个实际错误,除非满足条件-在其他情况下
如果一切正常的话,它永远不会发生——然后抛出一个异常。我应该在这里提到,异常不应该被用来控制程序流!是的,@Binkan是对的。一旦开始使用异常来控制程序流,就会出现很多问题和错误代码。如果要指示没有要返回的值,则返回null。如果在条件不满足的情况下调用此方法是一个实际错误,换句话说,如果一切正常,则永远不会发生此错误,然后抛出异常。我会在异常中放入什么?我只想退出该方法,不返回任何内容。@Adam Brave,那么您不应该使用异常take@AdamBrave你想要的是不可能的。要么一个方法不返回任何空值;或者如果它的签名说它应该返回一个值,那么你必须返回一个值或者抛出一个异常。我会在异常中放什么?我只想退出该方法,不返回任何内容。@Adam Brave,那么您不应该使用异常take@AdamBrave你想要的是不可能的。要么一个方法不返回任何空值;或者,如果它的签名说它应该返回一个值,那么您必须返回一个值或抛出一个异常。get访问器不应该直接设置值,而是使用事件机制。它也不应该控制她是否回来。除非是保安concern@AdamBrave旁注:您可能想学习一些Java编码风格指南-因为您的代码看起来确实不像99%的Java程序员希望它看起来像esp。关于名称的大小写,我认为中断周期就是返回方法。@AbdullahShaikh和继续的等价物是递归调用?:如果要指示没有要返回的值,则返回null。空值本质上只是没有任何意义。如果在不满足这些条件的情况下调用该方法是错误的,则抛出异常。我所说的错误是指,如果一切正常,这种情况就永远不会发生。这是你唯一的两个选择。我不建议在这两个选项之间做任何事情,因为从长远来看,这只会导致问题。get访问器不应该直接设置值,而是使用事件机制。它也不应该控制她是否回来。除非是保安concern@AdamBrave旁注:您可能想学习一些Java编码风格指南-因为您的代码看起来确实不像99%的Java程序员希望它看起来像esp。关于名称的大小写,我认为中断周期就是返回方法。@AbdullahShaikh和继续的等价物是递归调用?:如果要指示没有要返回的值,则返回null。空值本质上只是没有任何意义。如果在不满足这些条件的情况下调用该方法是错误的,则抛出异常。我所说的错误是指,如果一切正常,这种情况就永远不会发生。这是你唯一的两个选择。我不建议在这两个选项之间做任何事情,因为从长远来看,这只会导致问题。System.exit没有错,希望java有办法将方法标记为noexit。在这个问题和答案的上下文中,调用System.exit有很多错误。System.exit没有错,希望java有办法将方法标记为noexit though在这个问题和答案的上下文中,调用System.exit有很多错误。
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()