public static <T extends Object> T[] slice(T[] dstArray, T[] srcArray, 
			int startIndex) 
	{
		if (startIndex < 0) {
			startIndex = srcArray.length + startIndex;
			if (startIndex < 0) startIndex = 0;
		}

		if (dstArray == null) {
			throw new NullPointerException();
		}
		
		if (srcArray == null) {
			throw new NullPointerException();
		}
		
		int resultLength = getSliceLength(srcArray, startIndex);
		
		if (dstArray.length != resultLength) {
			throw new ArrayIndexOutOfBoundsException(
			    "First parameter must have length " + resultLength + ", but length is " + dstArray.length + ".");
		}
		
		int srcIx = startIndex;
		
		for (int dstIx = 0; 
		     dstIx < resultLength && srcIx < srcArray.length; 
		     dstIx++, srcIx++) 
		{
			dstArray[dstIx] = srcArray[srcIx];
		}
		
		return dstArray;
	}