扩展ByteArrayOutputStream时eclipse中的java资源泄漏警告
我使用ByteArrayOutputStream
用字节中不同长度的不同值填充字节数组。我使用write(byte[] b)
方法。由于此方法是从OutputStream
继承的,因此可能会引发IOException。在ByteArrayOutputStream
中有一个方法write(byte[] b, int off, int len)
不会引发IOException,因此我扩展了ByteArrayOutputStream
并重写了write(byte[] b)
方法,该方法现在也不会引发IOException:
private class ByteArrayOutputStreamNoException extends ByteArrayOutputStream
{
public ByteArrayOutputStreamNoException(int size)
{
super(size);
}
public ByteArrayOutputStreamNoException()
{
super();
}
@Override
public void write(byte[] data)
{
write(data, 0, data.length);
}
}
对于扩展类,我在eclipse 4.5.1中得到了资源泄漏的警告,因为我没有关闭代码中的流。但ByteArrayOutputStream
的情况并非如此。我的扩展类有什么问题,或者我需要添加什么来删除警告?我知道我可以将SuppressWarnings
注释添加到流的每个实例化中,但我更喜欢以某种方式更改扩展类以删除警告
# 1 楼答案
Eclipse在标准Java库中有一个不需要资源泄漏警告的类列表,
ByteArrayOutputStream
就是其中之一。Eclipse bug358903中对此有详细描述实现这一点的代码是
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding
的applyCloseableClassWhitelists
方法。类列表是硬编码的,不能扩展当扩展
ByteArrayOutputStream
类时,Eclipse无法再确保不需要close
,因此会收到警告您可以使用“try with resources”风格的try语句来解决这个问题: