01: /* Cloneable.java -- Interface for marking objects cloneable by Object.clone()
02: Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
03:
04: This file is part of GNU Classpath.
05:
06: GNU Classpath is free software; you can redistribute it and/or modify
07: it under the terms of the GNU General Public License as published by
08: the Free Software Foundation; either version 2, or (at your option)
09: any later version.
10:
11: GNU Classpath is distributed in the hope that it will be useful, but
12: WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: General Public License for more details.
15:
16: You should have received a copy of the GNU General Public License
17: along with GNU Classpath; see the file COPYING. If not, write to the
18: Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19: 02111-1307 USA.
20:
21: Linking this library statically or dynamically with other modules is
22: making a combined work based on this library. Thus, the terms and
23: conditions of the GNU General Public License cover the whole
24: combination.
25:
26: As a special exception, the copyright holders of this library give you
27: permission to link this library with independent modules to produce an
28: executable, regardless of the license terms of these independent
29: modules, and to copy and distribute the resulting executable under
30: terms of your choice, provided that you also meet, for each linked
31: independent module, the terms and conditions of the license of that
32: module. An independent module is a module which is not derived from
33: or based on this library. If you modify this library, you may extend
34: this exception to your version of the library, but you are not
35: obligated to do so. If you do not wish to do so, delete this
36: exception statement from your version. */
37:
38: package java.lang;
39:
40: /**
41: * This interface should be implemented by classes wishing to
42: * support of override <code>Object.clone()</code>. The default
43: * behaviour of <code>clone()</code> performs a shallow copy, but
44: * subclasses often change this to perform a deep copy. Therefore,
45: * it is a good idea to document how deep your clone will go.
46: * If <code>clone()</code> is called on an object which does not
47: * implement this interface, a <code>CloneNotSupportedException</code>
48: * will be thrown.
49: *
50: * <p>This interface is simply a tagging interface; it carries no
51: * requirements on methods to implement. However, it is typical for
52: * a Cloneable class to implement at least <code>equals</code>,
53: * <code>hashCode</code>, and <code>clone</code>, sometimes
54: * increasing the accessibility of clone to be public. The typical
55: * implementation of <code>clone</code> invokes <code>super.clone()</code>
56: * rather than a constructor, but this is not a requirement.
57: *
58: * <p>If an object that implement Cloneable should not be cloned,
59: * simply override the <code>clone</code> method to throw a
60: * <code>CloneNotSupportedException</code>.
61: *
62: * <p>All array types implement Cloneable, and have a public
63: * <code>clone</code> method that will never fail with a
64: * <code>CloneNotSupportedException</code>.
65: *
66: * @author Paul Fisher
67: * @author Eric Blake <ebb9@email.byu.edu>
68: * @author Warren Levy <warrenl@cygnus.com>
69: * @see Object#clone()
70: * @see CloneNotSupportedException
71: * @since 1.0
72: * @status updated to 1.4
73: */
74: public interface Cloneable {
75: // Tagging interface only.
76: }
|