這個類不應該是抽象的嗎?如果我直接使用它,反正會給我默認對象,因此我必須繼承它並覆蓋我關心的方法。我使用它的方式如下:爲什麼HttpServletRequestWrapper類不是抽象的
public class HttpRequestWrapper extends HttpServletRequestWrapper {
private static final Logger logger = LoggerFactory
.getLogger(HttpRequestWrapper.class);
private final byte[] body;
private static Gson gson = new Gson();
public HttpRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
// Read the request body and save it as a byte array
InputStream is = super.getInputStream();
body = IOUtils.toByteArray(is);
}
@Override
public ServletInputStream getInputStream() throws IOException {
return new ServletInputStreamImpl(new ByteArrayInputStream(body));
}
@Override
public BufferedReader getReader() throws IOException {
String encBody = getCharacterEncoding();
if (encBody != null && encBody != enc) {
enc = encBody;
}
return new BufferedReader(new InputStreamReader(getInputStream(), enc));
}
xxxxxxxx more code xxxxxx
}
我不明白,直接創造的了HttpServletRequestWrapper因此爲什麼不是抽象對象的優勢在哪裏?我錯過了一些關鍵的見解嗎?包裝(這是我在做什麼)的包裝是多餘的?
更新1:有沒有其他我可以用來實現相同的庫?
實際上,此類的默認行爲是回退到默認實現,並通過將其作爲抽象來實現同樣的行爲。可以定義一個抽象類並提供所有方法的實現。抽象的好處是它不會在開發人員的心目中產生任何疑問,因爲它可以直接用作包裝類。 – Richeek