src/main/java/org/organicdesign/fp/collections/Cowry.java
public static <T> T[] replaceInArrayAt(T replacedItem, T[] origItems, int idx,
                                           Class<T> tClass) {
        // Make an array that big enough.  It's too bad that the JVM bothers to
        // initialize this with nulls.
        @SuppressWarnings("unchecked")
        T[] newItems = (T[]) ( (tClass == null) ? new Object[origItems.length]
                                                : Array.newInstance(tClass, origItems.length) );
        System.arraycopy(origItems, 0, newItems, 0, origItems.length);
        newItems[idx] = replacedItem;
        return newItems;
    }
public static <T> T[] replaceInArrayAt(T replacedItem, T[] origItems, int idx,
                                           Class<T> tClass) {
        // Make an array that big enough.  It's too bad that the JVM bothers to
        // initialize this with nulls.
        @SuppressWarnings("unchecked")
        T[] newItems = (T[]) ( (tClass == null) ? new Object[origItems.length]
                                                : Array.newInstance(tClass, origItems.length) );
        System.arraycopy(origItems, 0, newItems, 0, origItems.length);
        newItems[idx] = replacedItem;
        return newItems;
    }
public static < T > T [ ] replaceInArrayAt ( T replacedItem , T [ ] origItems , int idx , Class < T > tClass ) { // Make an array that big enough.  It's too bad that the JVM bothers to // initialize this with nulls. @ SuppressWarnings ( "unchecked" ) T [ ] newItems = ( T [ ] ) ( ( tClass == null ) ? new Object [ origItems . length ] : Array . newInstance ( tClass , origItems . length ) ) ; System . arraycopy ( origItems , 0 , newItems , 0 , origItems . length ) ; newItems [ idx ] = replacedItem ; return newItems ; }
}
}