@Nullable
    // Since Bundle#getParcelableArrayList returns concrete ArrayList type, so this method follows that implementation.
    public static <T extends Parcelable> ArrayList<T> optParcelableArrayList(@Nullable Bundle bundle, @Nullable String key) {
        return optParcelableArrayList(bundle, key, new ArrayList<T>());
    }
@ Nullable public static < T extends Parcelable > ArrayList < T > optParcelableArrayList ( @ Nullable Bundle bundle , @ Nullable String key ) { return optParcelableArrayList ( bundle , key , new ArrayList < T > ( ) ) ; }
Returns a optional {@link android.os.Parcelable} {@link java.util.ArrayList}. In other words, returns the value mapped by key if it exists and is a {@link android.os.Parcelable} {@link java.util.ArrayList}.
The bundle argument is allowed to be {@code null}. If the bundle is null, this method returns null.
@param bundle a bundle. If the bundle is null, this method will return null.
@param key a key for the value.
@return a {@link android.os.Parcelable} {@link java.util.ArrayList} value if exists, null otherwise.
@see android.os.Bundle#getParcelableArrayList(String)