DataTable pojosToTableValue( Iterable<?> objects, final Table tableAnnotation, String parameterName, Annotation[] annotations ) {
        Object first = objects.iterator().next();

        RowFormatterFactory objectRowFormatterFactory = ReflectionUtil.newInstance( tableAnnotation.rowFormatter() );
        RowFormatter formatter = objectRowFormatterFactory.create( first.getClass(), parameterName, tableAnnotation, annotations,
            formatterConfiguration, objectFormatter );

        List<List<String>> list = Lists.newArrayList();

        if( tableAnnotation.header() != Table.HeaderType.NONE ) {
            if( tableAnnotation.columnTitles().length > 0 ) {
                list.add( Arrays.asList( tableAnnotation.columnTitles() ) );
            } else {
                list.add( formatter.header() );
            }
        }

        for( Object o : objects ) {
            list.add( formatter.formatRow( o ) );
        }

        list = formatter.postProcess( list );

        list = tableAnnotation.transpose() || tableAnnotation.header().isVertical() ? transpose( list ) : list;
        return new DataTable( tableAnnotation.header(), list );
    }
The default implementation to format a table argument
jgiven-core/src/main/java/com/tngtech/jgiven/format/table/DefaultTableFormatter.java