Java 根据条件返回不同类型的数据

Java 根据条件返回不同类型的数据,java,rest,Java,Rest,我有一个问题,如果在rest端点调用的方法中,我有一个错误日志,那么该方法应该返回一个文件。否则,如果一切都正确,它应该返回一个json 有没有办法根据条件更改方法的返回类型?我首先要说的是,对于您的问题,这可能是错误的方法。正确的方法是在出现错误时抛出异常,并使用异常处理程序处理。或者,在从方法返回之前,使用回调来处理错误情况。(这将处理您的“生成错误日志”用例。) 话虽如此 下面是一个“复杂”对象,可用于返回以下两种类型之一: public class AorB { private

我有一个问题,如果在rest端点调用的方法中,我有一个错误日志,那么该方法应该返回一个文件。否则,如果一切都正确,它应该返回一个json


有没有办法根据条件更改方法的返回类型?

我首先要说的是,对于您的问题,这可能是错误的方法。正确的方法是在出现错误时抛出异常,并使用异常处理程序处理。或者,在从方法返回之前,使用回调来处理错误情况。(这将处理您的“生成错误日志”用例。)

话虽如此

下面是一个“复杂”对象,可用于返回以下两种类型之一:

public class AorB {
    private final A a;
    private final B b;
    private final boolean isA;

    public AorB(A a) {
        this.a = a;
        this.b = null;
        isA = true;
    }

    public AorB(B b) {
        this.a = null;
        this.b = b;
        isA = false;
    }

    public boolean isA() {
        return isA;
    }

    public A getA() {
        if (isA) {
            return a;
        } else {
            throw IllegalStateException("Not an A!")
        }
    }

    public B getB() {
        if (!isA) {
            return b;
        } else {
            throw IllegalStateException("Not a B!")
        }
    }
}

或者,您可以将返回类型声明为
Object
,并在调用方法中使用类型转换和
instanceof
来区分返回值。

您可以使用复杂对象作为返回类型。您可以显示示例或引用任何示例。您可以返回对象类型,在调用方方法中使用instanceof(这不是一个好的解决方案,但可以满足您的需要)。看起来您的软件中有一个设计/架构错误。您可以返回JSON类型,并在出现错误时抛出一个提供该文件的自定义
异常
。@Mat不,这里有两个方法不起作用,因为返回类型在方法进入之前是未知的。这是某种“出错时”方法应该提供一些回退信息虽然这是一个聪明的解决方法,但在这种情况下并不合适:OP应该返回一个有效的JSON,如果发生错误,他应该返回500个错误,而不是不同的类型。从注释中:“为什么要创建这两个方法?它只是调用该方法的一个rest端调用,如果出现错误,我们必须生成错误日志,如果没有,则返回json”-Aman