RFR: 8017513: Support for closeable streams
Florian Weimer
fweimer at redhat.com
Mon Jul 15 07:54:13 UTC 2013
On 07/12/2013 01:22 PM, David Holmes wrote:
> On 12/07/2013 6:22 AM, Paul Benedict wrote:
>> Paul S.'s said the "negative" of using AutoCloseable is "it is no longer
>> clear whether a stream should be closed or not" (6/20). That's true
>> because
>> the semantics of AutoCloseable indicates you have a resource that
>> requires
>> closing.
>>
>> However, the choice to make MayHoldCloseableResource a sub-interface of
>> AutoClosable should be resisted. It's an inverted design. The Liskov
>> *substitution principle *says that sub-interfaces can't loosen the
>> contracts
> > of their superinterface.
>
> Not quite. It says:
>
> - Preconditions cannot be strengthened in a subtype.
> - Postconditions cannot be weakened in a subtype.
> - Invariants of the supertype must be preserved in a subtype.
>
> Question is: what kind of property is "closeability"?
In the Java type system, it's not a property of the type at all.
You should call close() on an AutoCloseable reference iff this is the
last reference to the object *and* if the close operation does not
propagate to some underlying object that outlives the reference (which
can happen with FilterInputStream, for example).
Is there really a risk that IDEs would warn about missing close() calls
in the streams framework? That seems unlikely because without method-
and object-specific annotations (which aren't available in other parts
of the platform), those diagnostics would be full of false positives.
--
Florian Weimer / Red Hat Product Security Team
More information about the core-libs-dev
mailing list