从方法中 return null 的最佳方法?
Best way to return null from a method?
我需要获取代码为 运行 的机器的主机名。我有这样的方法:
private static final String getHostName() {
try {
return InetAddress.getLocalHost().getCanonicalHostName().toLowerCase();
} catch (UnknownHostException ex) {
logger.logError("error = ", ex);
}
// this looks pretty odd to me, are there any better options?
// like with guava or apache commons?
return null;
}
这就是我在上面使用的方法 getHostName()
方法
private static String findData() {
String host = getHostName();
if(host != null) {
// do something
}
// otherwise do something else
}
我的问题是 - 返回 null 对我来说看起来很奇怪。我可以在这里使用 Guava 或 Apache Commons 的任何其他选项吗?
如果不想抛出异常,想明确处理缺失值的情况,可以return Optional
private static final Optional<String> getHostName() {
try {
return Optional.of(
InetAddress.getLocalHost().getCanonicalHostName().toLowerCase());
} catch (UnknownHostException ex) {
logger.logError("error = ", ex);
return Optional.absent();
}
}
客户端代码如下所示:
private static String findData() {
Optional<String> optionalHost = getHostName();
if (optionalHost.isPresent()) {
String host = optionalHost.get();
// do something
} else {
// otherwise do something else
}
}
有关避免和处理空值的更多信息here。
如果您希望调用者处理这种情况,那么您可以使用 Optional
(来自 Guava 或来自 JDK 8),或者简单地让异常冒泡(使用或没有先记录它)。
如果您不希望出现这种情况,也不希望呼叫者处理它,而只是想满足 "catch or specify" 要求,那么您可以将其包装在未经检查的异常并引发它。
returning null 对你来说看起来很奇怪表明你有正确的感觉。永远不要 return null 因为你必须处理 return 值(如果 x == null ...)。所以抛出异常并在适当的地方捕获它。如果您不希望它与签名相关,请尽早将其包装在运行时异常中并重新抛出。然后在适当的地方抓住它...我已经提到了吗?
Guava 提供 Optional class 正是为了不必 return null
。
但是,如果您已经 使用 Java 8,请注意,它还带有 Optional class,您可能更喜欢使用那个(为了独立于外部库)。
我需要获取代码为 运行 的机器的主机名。我有这样的方法:
private static final String getHostName() {
try {
return InetAddress.getLocalHost().getCanonicalHostName().toLowerCase();
} catch (UnknownHostException ex) {
logger.logError("error = ", ex);
}
// this looks pretty odd to me, are there any better options?
// like with guava or apache commons?
return null;
}
这就是我在上面使用的方法 getHostName()
方法
private static String findData() {
String host = getHostName();
if(host != null) {
// do something
}
// otherwise do something else
}
我的问题是 - 返回 null 对我来说看起来很奇怪。我可以在这里使用 Guava 或 Apache Commons 的任何其他选项吗?
如果不想抛出异常,想明确处理缺失值的情况,可以return Optional
private static final Optional<String> getHostName() {
try {
return Optional.of(
InetAddress.getLocalHost().getCanonicalHostName().toLowerCase());
} catch (UnknownHostException ex) {
logger.logError("error = ", ex);
return Optional.absent();
}
}
客户端代码如下所示:
private static String findData() {
Optional<String> optionalHost = getHostName();
if (optionalHost.isPresent()) {
String host = optionalHost.get();
// do something
} else {
// otherwise do something else
}
}
有关避免和处理空值的更多信息here。
如果您希望调用者处理这种情况,那么您可以使用 Optional
(来自 Guava 或来自 JDK 8),或者简单地让异常冒泡(使用或没有先记录它)。
如果您不希望出现这种情况,也不希望呼叫者处理它,而只是想满足 "catch or specify" 要求,那么您可以将其包装在未经检查的异常并引发它。
returning null 对你来说看起来很奇怪表明你有正确的感觉。永远不要 return null 因为你必须处理 return 值(如果 x == null ...)。所以抛出异常并在适当的地方捕获它。如果您不希望它与签名相关,请尽早将其包装在运行时异常中并重新抛出。然后在适当的地方抓住它...我已经提到了吗?
Guava 提供 Optional class 正是为了不必 return null
。
但是,如果您已经 使用 Java 8,请注意,它还带有 Optional class,您可能更喜欢使用那个(为了独立于外部库)。