1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | package Torello.Java.Additional; /** * A simple wrapper class for passing variables by-reference to methods calls. * * <BR /><BR />Note that this class is substantively identical to the class * {@link EffectivelyFinal}, but has a more apropos name. * * @param <A> Any type. Class {@code ByRef} serves as a wrapper for this type. */ public class ByRef<A> implements Cloneable { /** * The actual variable being <B STYLE='color: red;'><I>both</I></B> passed, * <B STYLE='color: red;'><I>and</I></B> retrieved from a method. */ public A f; /** * Creates an instance of this class, and initializes the field. * * @param f Initializes this class' only field, {@code this.f}, with the value provided by * parameter {@code 'f'} */ public ByRef(A f) { this.f = f; } /** * Creates an instance of this class, and initializes the field {@code this.f} to null. */ public ByRef() { this.f = null; } /** * Invokes the standard {@code java.lang.Object} method {@code toString()} on the field * {@code this.f}. * * @return Returns the {@code String} produced by the contents' {@code toString()} * */ public String toString() { return f.toString(); } /** * Invokes the standard {@code java.lang.Object} method {@code hashCode()} on the field * {@code this.f} * * @return Returns the hash code produced by the contents' {@code hashCode()}. */ public int hashCode() { return f.hashCode(); } /** * This creates a clone of the wrapper class. * * <BR /><BR /><B STYLE='color:red;'>NOTE:</B> The field, itself, is not cloned. Another * {@code ByRef} wrapper is built, using the same internal field. Both the clone * and {@code 'this'} will share a pointer-reference to the same field. * * @return An {@code ByRef<A>} clone. */ public ByRef<A> clone() { return new ByRef<>(f); } /** * This equality test checks whether both {@code 'this'} and {@code 'other'} share * identical references. Equality between the contained / wrapped field {@code 'f'} is not * checked. * * <BR /><BR />If {@code this.f} and {@code other.f} hold different references, this method * will return {@code FALSE} <I>even if both of these references have Object-Equality</I>. * * @return Returns {@code TRUE} if and only if {@code 'other'} is an instance of * {@code 'ByRef'} and {@code this.f == other.f}. This method checks for pointer-equality, * rather than object-equality. */ @SuppressWarnings("rawtypes") public boolean equals(Object other) { if (! (other instanceof ByRef)) return false; ByRef o = (ByRef) other; return this.f == o.f; } } |