emul/mini/src/main/java/java/lang/AutoCloseable.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 26 Jan 2013 08:47:05 +0100
changeset 592 5e13b1ac2886
parent 119 484416f2dc2c
permissions -rw-r--r--
In order to support fields of the same name in subclasses we are now prefixing them with name of the class that defines them. To provide convenient way to access them from generated bytecode and also directly from JavaScript, there is a getter/setter function for each field. It starts with _ followed by the field name. If called with a parameter, it sets the field, with a parameter it just returns it.
     1 /*
     2  * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    25 
    26 package java.lang;
    27 
    28 /**
    29  * A resource that must be closed when it is no longer needed.
    30  *
    31  * @author Josh Bloch
    32  * @since 1.7
    33  */
    34 public interface AutoCloseable {
    35     /**
    36      * Closes this resource, relinquishing any underlying resources.
    37      * This method is invoked automatically on objects managed by the
    38      * {@code try}-with-resources statement.
    39      *
    40      * <p>While this interface method is declared to throw {@code
    41      * Exception}, implementers are <em>strongly</em> encouraged to
    42      * declare concrete implementations of the {@code close} method to
    43      * throw more specific exceptions, or to throw no exception at all
    44      * if the close operation cannot fail.
    45      *
    46      * <p><em>Implementers of this interface are also strongly advised
    47      * to not have the {@code close} method throw {@link
    48      * InterruptedException}.</em>
    49      *
    50      * This exception interacts with a thread's interrupted status,
    51      * and runtime misbehavior is likely to occur if an {@code
    52      * InterruptedException} is {@linkplain Throwable#addSuppressed
    53      * suppressed}.
    54      *
    55      * More generally, if it would cause problems for an
    56      * exception to be suppressed, the {@code AutoCloseable.close}
    57      * method should not throw it.
    58      *
    59      * <p>Note that unlike the {@link java.io.Closeable#close close}
    60      * method of {@link java.io.Closeable}, this {@code close} method
    61      * is <em>not</em> required to be idempotent.  In other words,
    62      * calling this {@code close} method more than once may have some
    63      * visible side effect, unlike {@code Closeable.close} which is
    64      * required to have no effect if called more than once.
    65      *
    66      * However, implementers of this interface are strongly encouraged
    67      * to make their {@code close} methods idempotent.
    68      *
    69      * @throws Exception if this resource cannot be closed
    70      */
    71     void close() throws Exception;
    72 }