guava/src/com/google/common/collect/ArrayTable.java
@GwtIncompatible // reflection
  public V[][] toArray(Class<V> valueClass) {
    @SuppressWarnings("unchecked") // TODO: safe?
    V[][] copy = (V[][]) Array.newInstance(valueClass, rowList.size(), columnList.size());
    for (int i = 0; i < rowList.size(); i++) {
      System.arraycopy(array[i], 0, copy[i], 0, array[i].length);
    }
    return copy;
  }
@GwtIncompatible // reflection
  public V[][] toArray(Class<V> valueClass) {
    @SuppressWarnings("unchecked") // TODO: safe?
    V[][] copy = (V[][]) Array.newInstance(valueClass, rowList.size(), columnList.size());
    for (int i = 0; i < rowList.size(); i++) {
      System.arraycopy(array[i], 0, copy[i], 0, array[i].length);
    }
    return copy;
  }
Returns a two-dimensional array with the table contents. The row and column indices correspond
to the positions of the row and column in the iterables provided during table construction. If
the table lacks a mapping for a given row and column, the corresponding array element is null.

<p>Subsequent table changes will not modify the array, and vice versa.

@param valueClass class of values stored in the returned array