Added Safty methods and test into IObjectArray to reduce crashes.
This commit is contained in:
@@ -556,6 +556,16 @@ public class ARRAY_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
|
||||
return data;
|
||||
}
|
||||
|
||||
#if TYPE_OBJECT
|
||||
/**
|
||||
* @return if the array is castable
|
||||
*/
|
||||
@Override
|
||||
public boolean isCastable() {
|
||||
return data.getClass() != Object[].class;
|
||||
}
|
||||
|
||||
#endif
|
||||
/**
|
||||
* A Type Specific foreach function that reduces (un)boxing
|
||||
*
|
||||
|
||||
@@ -19,13 +19,22 @@ public interface IARRAY KEY_GENERIC_TYPE extends IArray
|
||||
*/
|
||||
public KEY_TYPE[] elements();
|
||||
|
||||
#if TYPE_OBJECT
|
||||
/**
|
||||
* Method to indicate if the function is save to use
|
||||
* @return true if the object is castable to the type that is requested
|
||||
*/
|
||||
public boolean isCastable();
|
||||
#endif
|
||||
/**
|
||||
* Provides the Underlying Array in the Implementation. This function exists purely because of Synchronization wrappers to help run Synchronized Code
|
||||
* @param action the action that handles the array
|
||||
* @throws NullPointerException if action is null
|
||||
* @throws ClassCastException if the return type does not match the underlying array. (Only for Object Implementations)
|
||||
*/
|
||||
public default void elements(Consumer<KEY_TYPE[]> action) {
|
||||
#if TYPE_OBJECT
|
||||
if(!isCastable()) return;
|
||||
#endif
|
||||
Objects.requireNonNull(action);
|
||||
action.accept(elements());
|
||||
}
|
||||
|
||||
@@ -149,11 +149,16 @@ public class LISTS
|
||||
@Override
|
||||
public KEY_TYPE[] elements() { synchronized(mutex) { return l.elements(); } }
|
||||
|
||||
#if TYPE_OBJECT
|
||||
@Override
|
||||
public boolean isCastable() { synchronized(mutex) { return l.isCastable(); } }
|
||||
|
||||
#endif
|
||||
@Override
|
||||
public void elements(Consumer<KEY_TYPE[]> action) {
|
||||
Objects.requireNonNull(action);
|
||||
synchronized(mutex) {
|
||||
action.accept(elements());
|
||||
l.elements(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user