作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,使用 gzip 的工作人员,我遇到了一个问题。我有一个 GzipWrapper 并且有很多 if else,是否可以使用Optional.orElse 做类似的事情?通过简单的可选示例,我将其整理出来,但我不太明白如何在包装器中执行此操作。其中一种方法的示例就足够了)提前致谢)
我的包装器:
public class GZIPFilterResponseWrapper extends HttpServletResponseWrapper implements Closeable {
private PrintWriter printWriter;
private GZIPFilterResponseStream gzipStream;
private ServletOutputStream outputStream;
public GZIPFilterResponseWrapper(HttpServletResponse response) throws IOException {
super(response);
response.addHeader(CONTENT_ENCODING, GZIP);
gzipStream = new GZIPFilterResponseStream(response.getOutputStream());
}
@Override
public void flushBuffer() throws IOException {
if (nonNull(printWriter)) {
printWriter.flush();
}
if (nonNull(outputStream)) {
outputStream.flush();
}
super.flushBuffer();
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
if (nonNull(printWriter)) {
throw new IllegalStateException(GZIP_CANNOT_WRITE);
}
if (isNull(outputStream)) {
outputStream = gzipStream;
}
return outputStream;
}
@Override
public PrintWriter getWriter() throws IOException {
if (nonNull(outputStream)) {
throw new IllegalStateException(GZIP_WRITER_ALREADY_HAS_CALLING);
}
if (isNull(printWriter)) {
printWriter = new PrintWriter(new OutputStreamWriter(gzipStream, getResponse().getCharacterEncoding()));
}
return printWriter;
}
@Override
public void close() throws IOException {
if (nonNull(printWriter)) {
printWriter.close();
}
if (nonNull(outputStream)) {
try {
outputStream.close();
} catch (IOException e) {
throw new IOException(e.getMessage());
}
}
}
}
最佳答案
可选
不能替代条件逻辑。
可选
,以便 API 有一种一致的方式来声明方法返回可能存在或不存在的值,而不返回 null。返回 null
很容易出现异常,并且在不阅读文档的情况下,没有简单的方法可以知道是否期望 null
。 可选
使该契约(Contract)变得明确。
因此,虽然可能可能用可选
替换条件逻辑,但这不太可能使您的代码变得更好或更容易阅读。
下面是一个例子,只是为了满足您的好奇心:
if (nonNull(printWriter)) {
printWriter.flush();
}
变成了
Optional.ofNullable(printWriter).ifPresent(PrintWriter::flush);
关于java - 在GZIPWrapper中如何将if else替换为Optional.orElse?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53062058/
我是一名优秀的程序员,十分优秀!