class ArrayFieldVector implements FieldVector<T>, Serializable {

    public FieldMatrix<T> outerProduct(FieldVector<T> v) {
        try {
            return outerProduct((ArrayFieldVector<T>) v);
        } catch (ClassCastException cce) {
            final int m = data.length;
            final int n = v.getDimension();
            final FieldMatrix<T> out = new Array2DRowFieldMatrix<T>(field, m, n);
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    out.setEntry(i, j, data[i].multiply(v.getEntry(j)));
                }
            }
            return out;
        }
    }

    public  ArrayFieldVector(final Field<T> field);
    public  ArrayFieldVector(Field<T> field, int size);
    public  ArrayFieldVector(int size, T preset);
    public  ArrayFieldVector(T[] d);
    public  ArrayFieldVector(Field<T> field, T[] d);
    public  ArrayFieldVector(T[] d, boolean copyArray);
    public  ArrayFieldVector(Field<T> field, T[] d, boolean copyArray);
    public  ArrayFieldVector(T[] d, int pos, int size);
    public  ArrayFieldVector(Field<T> field, T[] d, int pos, int size);
    public  ArrayFieldVector(FieldVector<T> v);
    public  ArrayFieldVector(ArrayFieldVector<T> v);
    public  ArrayFieldVector(ArrayFieldVector<T> v, boolean deep);
    @Deprecated public  ArrayFieldVector(ArrayFieldVector<T> v1, ArrayFieldVector<T> v2);
    public  ArrayFieldVector(FieldVector<T> v1, FieldVector<T> v2);
    @Deprecated public  ArrayFieldVector(ArrayFieldVector<T> v1, T[] v2);
    public  ArrayFieldVector(FieldVector<T> v1, T[] v2);
    @Deprecated public  ArrayFieldVector(T[] v1, ArrayFieldVector<T> v2);
    public  ArrayFieldVector(T[] v1, FieldVector<T> v2);
    public  ArrayFieldVector(T[] v1, T[] v2);
    public  ArrayFieldVector(Field<T> field, T[] v1, T[] v2);

}