有没有办法在使用三元运算符的 return 语句中抛出异常?
Is there a way to throw an exception in a return statement that uses the ternary operator?
我有一个函数 returns 在某些情况下为 null,例如:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
}
而且我想创建另一个函数来做完全相同的事情,除了它抛出错误而不是在满足该条件时返回 null。我试过这样做:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
public static Double barWithException(double a, double b) {
return bar(a, b) == null ? throw new IllegalArgumentException() : bar(a, b);
}
}
不幸的是 Java 不喜欢这个并在“throw”标记上给我一个语法错误(并告诉我它不能从 IllegalArgumentException 转换为 Double)。我能想到的唯一其他方法是这样的:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
public static Double barWithException(double a, double b) {
if (bar(a, b) == null) throw new IllegalArugmentException();
return bar(a, b);
}
}
这当然很好,我只是想知道是否有一种方法可以在一行中执行此操作或将异常抛出集成到条件运算符中。非常感谢任何帮助。
你可以用 Optional
来做这个
return Optional.ofNullable(bar(a, b))
.orElseThrow(() -> new IllegalArgumentException());
我有一个函数 returns 在某些情况下为 null,例如:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
}
而且我想创建另一个函数来做完全相同的事情,除了它抛出错误而不是在满足该条件时返回 null。我试过这样做:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
public static Double barWithException(double a, double b) {
return bar(a, b) == null ? throw new IllegalArgumentException() : bar(a, b);
}
}
不幸的是 Java 不喜欢这个并在“throw”标记上给我一个语法错误(并告诉我它不能从 IllegalArgumentException 转换为 Double)。我能想到的唯一其他方法是这样的:
public Class Foo {
public static Double bar(double a, double b) {
if (a == 0 || b == 0) return null;
return a + b;
}
public static Double barWithException(double a, double b) {
if (bar(a, b) == null) throw new IllegalArugmentException();
return bar(a, b);
}
}
这当然很好,我只是想知道是否有一种方法可以在一行中执行此操作或将异常抛出集成到条件运算符中。非常感谢任何帮助。
你可以用 Optional
来做这个
return Optional.ofNullable(bar(a, b))
.orElseThrow(() -> new IllegalArgumentException());