Class Ret4<A,​B,​C,​D>

  • Type Parameters:
    A - The type of the first member-field ('a').
    B - The type of the second member-field ('b').
    C - The type of the third member-field ('c').
    D - The type of the last member-field ('d').
    All Implemented Interfaces:, java.lang.Cloneable

    public class Ret4<A,​B,​C,​D>
    extends RetN
    implements, java.lang.Cloneable
    This simple generic-class allows a function to return four objects as a result, instead of just one. This is not always so useful, and can make code confusing. However there are some instances where the only alternative would be to create an entirely new class/object, when only a single method result would use that object.

    Immutable, Read-Only
    Classes which inherit Ancestor-Class RetN will always contains fields declared using the 'final' modifier. These classes are, therefore, "Unmodifiable Tuples" - meaning their contents can never change once they have been instantiated.

    Remember: The classes Ret4 and Tuple4 completely identical, with the sole difference being that Ret4 fields are all declared final, but the Tuple4 fields are not!
    See Also:
    Serialized Form

    • Field Summary

      Serializable ID
      Modifier and Type Field
      protected static long serialVersionUID
      Instance Fields
      Modifier and Type Field
      A a
      B b
      C c
      D d
    • Constructor Summary

      Constructor Description
      Ret4​(A a, B b, C c, D d)
      Constructs this object
    • Method Summary

      Retrieve the Number of Fields in this Class
      Modifier and Type Method
      int n()
      Retrieve a Field by Field-Number
      Modifier and Type Method
      Object get​(int i)
      Convert this instance to a Read-Write Tuple, of the same size
      Modifier and Type Method
      Tuple4<A,​B,​C,​D> toModifiable()
      Methods: interface java.lang.Cloneable
      Modifier and Type Method
      Ret4<A,​B,​C,​D> clone()
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • serialVersionUID

        🡇     🗕  🗗  🗖
        protected static final long serialVersionUID
        This fulfils the SerialVersion UID requirement for all classes that implement Java's interface Using the Serializable Implementation offered by java is very easy, and can make saving program state when debugging a lot easier. It can also be used in place of more complicated systems like "hibernate" to store data as well.
        See Also:
        Constant Field Values
        Exact Field Declaration Expression:
         protected static final long serialVersionUID = 1;
    • Method Detail

      • n

        🡅  🡇     🗕  🗗  🗖
        public int n()
        Returns '4', indicating how many fields are declared by this class.
        Specified by:
        n in class MultiType
        As an instance of Ret4, this method returns '4';
        Exact Method Body:
         return 4;
      • clone

        🡅  🡇     🗕  🗗  🗖
        public Ret4<A,​B,​C,​Dclone()
        Description copied from class: MultiType
        Clones the contents of 'this' instance of.
        Specified by:
        clone in class MultiType
        A clone copy of 'this' object.
        Exact Method Body:
         return new Ret4<>(this.a, this.b, this.c, this.d);
      • get

        🡅  🡇     🗕  🗗  🗖
        public java.lang.Object get​(int i)
        This method will retreive the ith field of this instance. This can be useful when you wish to use the Ancestor / Parent classses: RetN or MultiType for handling 'this' instance.

        As a reminder, the fields inside this class have all been declared public! Referencing this instance' fields, directly, will always work in place of calling any of the get(...) methods.

        Type Casting:
        This method can make for easier typing. When using either of the super-classes of this class - namely RetN or MultiType - you simply do not have to type (into your computer's keyboard) all of the Field Generic Types (the stuff between the '<' and '>' less-than & greater-than symbols).

        However, anytime one of these ancestor classes are used instead of the actual Ret4 instance, you will have to use one of the provided 'get' methods to retrieve a field inside the Ret4 instance. This is because the parent-ancestor classes do not actually have any fields to retrieve.

        There are three 'get' methods provided in Root-Ancestor Class MultiType. Each of these three 'getters' allows for casting (this) sub-class' returned fields in a slightly different way. When you aren't referencing the actual instance, itself, but rather one of the two Parent-Tuple Classes, you must use one of their getters, and you will have to cast the fields that you wish to use, eventually!

        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        // No Cast Necessary
        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        // This line makes for longer typing, but DOES NOT REQUIRE A CAST TO RETRIEVE FIELDS.
        // Here the example Multi-Type Identifier is used: Ret4.
        Ret4<String, Integer, Date, File> ref4 = some_function_returns_4();
        String neededStrField = ref4.a;
        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        // Less Keyboard-Typing (Less Eyesores), but Requires a Cast
        // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        // If the Ret4 super-class RetN is used to reference this class data,
        RetN refN = some_function_returns4();
        // Version #1: (this method) - simple 'get'
        String neededStrField = (String) refN.get(1);
        // Version #1: The second Method-Parameter is a 'Class<T>' Type-Parameter
        // Note, again, that passing a '1' to the first parameter retrieves Ret4.a
        String neededStrField = refN.get(1, String.class);
        // Version #3: "GET" (in all caps) utilizes Java "Type-Inferencing" - the Return-Type
        // is specified by the left side of the assignments statement.
        String needesStrField = refN.GET(1);
        Specified by:
        get in class MultiType
        i - This specifies which field of the instance is being requested.

        IMPORTANT: Unlike a Java array, when a '1' is passed to this parameter, it is requesting the first field in this instance. Passing a value of '0' shall cause an IndexOutOfBoundsException throw.
        This returns the ith field of this class.
        See Also:
        MultiType.get(int, Class), MultiType.GET(int)
        Exact Method Body:
         // Throws Exception if i not in [1..4]
         return (i <= 2)
             ? ((i == 1) ? a : b)
             : ((i == 3) ? c : d);
      • toModifiable

        🡅     🗕  🗗  🗖
        public Tuple4<A,​B,​C,​DtoModifiable()
        Description copied from class: RetN
        Converts 'this' Read-Only RetN instance into a Read-Write TupleN.
        Specified by:
        toModifiable in class RetN
        A TupleN of the same size, which is a modifiable type whose fields are not decorated with the 'final' modifier - as the fields in this class are.
        Exact Method Body:
         return new Tuple4<>(this.a, this.b, this.c, this.d);