Difference between revisions of "Iterable Immutable List Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 31: Line 31:
 
public static <E> ImmutableList<E> brackets(E... elements)</nowiki>
 
public static <E> ImmutableList<E> brackets(E... elements)</nowiki>
  
<code>brackets</code> accepts [https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html variable length arguments] as specified by the <code>...</code> syntax.
+
<code>brackets</code> accepts [https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html variable length arguments] as specified by the <code>...</code> syntax.  When implementing the <code>brackets</code> method you can treat <code>elements</code> as an array.  Combining generics and varargs can be problematic if the implementation lets the E[] escape since it will actually be an Object[].  The [[https://docs.oracle.com/javase/7/docs/api/java/lang/SafeVarargs.html @SafeVarargs]] annotation indicates a promise that you will rely [https://stackoverflow.com/questions/14231037/java-safevarargs-annotation-does-a-standard-or-best-practice-exist only on the elements of the array being of type E].  This should not be a problem.
  
 
=Test=
 
=Test=
 
{{TestSuite|ListsTestSuite|immutable.list.assignment}}
 
{{TestSuite|ListsTestSuite|immutable.list.assignment}}

Revision as of 19:14, 30 July 2019

Code To Implement

DefaultImmutableList

class: DefaultImmutableList.java Java.png
methods: head
tail
isEmpty
iterator
package: immutable.list.assignment
source folder: src/main/java

default constructor

head and tail constructor

head

tail

isEmpty

iterator

Lists

Lists is a class which holds a number of static methods. As we know, in the Kingdom of Nouns, Verbs must always have an escort.

The first two static methods nil and cons will each call a constructor of the DefaultImmutableList class. The third method brackets will use nil and cons to build up the desired ImmutableList.

class: Lists.java Java.png
methods: nil
cons
brackets
package: immutable.list.assignment
source folder: src/main/java

nil

public static <E> ImmutableList<E> nil()

Analogous to the SML List nil constructor.

Note: often SML programs use empty brackets [] instead of nil.

cons

public static <E> ImmutableList<E> cons(E head, ImmutableList<E> tail)

Analogous to the SML List :: constructor.

brackets

@SafeVarargs
public static <E> ImmutableList<E> brackets(E... elements)

brackets accepts variable length arguments as specified by the ... syntax. When implementing the brackets method you can treat elements as an array. Combining generics and varargs can be problematic if the implementation lets the E[] escape since it will actually be an Object[]. The [@SafeVarargs] annotation indicates a promise that you will rely only on the elements of the array being of type E. This should not be a problem.

Test

class: ListsTestSuite.java Junit.png
package: immutable.list.assignment
source folder: src/test/java