您好我想知道如何在下面的函数中使用java SE 8中的Optional。
public URL getAuthenticatedURL() throws MalformedURLException {
if (log != null){
log.writeINFOToLog("Fetching authentication URL...");
}
else{
Log.initLog();
log.writeINFOToLog("Fetching authentication URL...");
}
try{
String url = String.format("%s://%s%s?username=%s&password=%s",getProtocol(), getHost(), getPath(), getUsername(), getPassword());
URL returnURL = new URL(url);
return returnURL;
}
catch (MalformedURLException ex){
log.writeExceptionToLog(ex);
return null;
}
}
我希望能够处理构造URL所涉及的值为null或为空的场景。
答案 0 :(得分:0)
我认为使用 Supplier
比Optional
更合理,因为getAuthenticatedURL()
没有参数并生成对象(URL)。
看起来像:
Supplier<URL> supplier = () -> {
...
try {
return new URL(...);
} catch (MalformedURLException e) {
return null;
}
};
URL url = supplier.get();
答案 1 :(得分:0)
经过一些研究,我认为我最好避免使用空值,因为没有空位是没有意义的。
使用Optional<URL>
public Optional<URL> getAuthenticatedURL() throws MalformedURLException {
if (log != null){
log.writeINFOToLog("Fetching authentication URL...");
}
else{
Log.initLog();
log.writeINFOToLog("Fetching authentication URL...");
}
String url = String.format("%s://%s%s?username=%s&password=%s",getProtocol(), getHost(), getPath(), getUsername(), getPassword());
return Optional.ofNullable(new URL(url));
}
因此,当我调用该函数时,代码将是这样的。
if(getAuthenticatedURL.isPresent()){
URL val = getAuthenticatedURL.get();
}