java三元运算符返回函数结果

时间:2018-02-15 08:50:29

标签: java ternary-operator

我只是想知道是否有可能创建这样的东西:

String variable = "name of the variable I'm checking";

for (int i = 0; i < 16; i++)
{       // if it's possible what type should the check variable be?
        check = (array[0].equals("value1") || array[0].equals("value2") ? 
                "some value or null?" : throwException(i, variable);
}
public void throwException(int index, String name) throws TelegrammException
{
    throw new TelegrammException("Wrong telegramm format at position: " 
                                 + index + "; Name: " + name);
}

如果不可能,你能建议一个如何做类似事情的好习惯吗?

3 个答案:

答案 0 :(得分:2)

技术上是的,如果您将throwException方法的返回类型更改为String

public String throwException(int index, String name) throws TelegrammException

然而,有一个表面上返回一个实际上总是抛出的字符串的方法是非常不同寻常的,几乎肯定会混淆你的代码的未来读者。表达意图的惯用方法是根本不使用三元表达式:

if (array[0].equals("value1") || array[0].equals("value2"))
{
    check = "some value or null?";
}
else
{
    throwException(i, variable);
}

答案 1 :(得分:1)

不,三元运算符无法实现。至少不是Java。两个表达式都应该解决返回相同的事情。否则编译器会发出错误。你的第二个表达式除了抛出表达式之外没有返回任何东西。它不会那样工作。

From the JLS,关于三元运算符:

  

第一个表达式必须是booleanBoolean类型,否则会发生编译时错误。

     

第二个或第三个操作数表达式是void方法的调用是编译时错误。

您应该考虑采用传统方法。

for (int i = 0; i < 16; i++)
{   // if it's possible what type should the check variable be?
    if (array[0].equals("value1") || array[0].equals("value2"))
    { 
        check =   "some value or null?";
    } else {
        throwException(i, variable);
    }
}

答案 2 :(得分:1)

当然:让你的方法“返回”String

public String throwException(int index, String name) throws TelegrammException
{
    throw new TelegrammException("Wrong telegramm format at position: " 
                                 + index + "; Name: " + name);
}

现在,这实际上永远不会返回String因为它没有正常完成。但您现在可以在条件表达式中使用它:

String result = condition ? "Something" : throwException(index, name);

但是:这是滥用语法。只需坚持使用简单的if语句:

if (condition) {
    result = "Something";
} else {
    throwException(index, name);
}

您可能还想考虑制作方法TelegrammException的返回类型:

public TelegrammException throwException(int index, String name) throws ...

这允许您在呼叫站点throw

  throw throwException(index, name);

允许您向编译器(以及读取您的代码的人)指示执行不会继续执行,这可能会帮助您完成明确的赋值/返回值要求。