import java.util.List;
import java.util.ArrayList;
public class Gen {
    private int i;

    public Gen() { this.i = 0; }
    public <T> Gen(List<T> l) {
        this.i = l.size();
    }

    public int getI() { return this.i; }

    public <T> void setIFromSize(List<T> l) {
        if (l.size() != 0) {
            l.add(l.get(0));
        }
        this.i = l.size();
    }

    static public <E> void affiche(List<E> l) {
        System.out.println(l);
    }

    // static public <E extends Number> E somme(List<E> l) {
    //     E res = l.get(0);
    //     for (int i = 1; i < l.size(); i++)
    //         res = E.add(res, l.get(i));   // il faudrait ici une methode pour ajouter.
    //     return res;
    // }

    public static <T extends Comparable<T>> T MyMin(T t1, T t2) {
        if (t1.compareTo(t2) < 0) return t1;
        else return t2;
    }

    public static <T extends Comparable<T>> T MinList(List<T> l) {
        T res = l.get(0);
        for (int i = 1; i < l.size(); i++) {
            T cur = l.get(i);
            if (cur.compareTo(res) < 0) res = cur;
        }
        return res;
    }

    public static void add1(List<? super Integer> l) {
        l.add(1);
    }

    public static void main(String[] args) {
        ArrayList<Number> a = new ArrayList<>();
        a.add(3); a.add(4.2); a.add(6);
        Gen.affiche(a);

        System.out.println(MyMin(6, 2));
        System.out.println(MyMin(6.5, 2.7));

        ArrayList<Integer> b = new ArrayList<>();
        b.add(3); b.add(2); b.add(6);
        Gen.add1(b);
        System.out.println(MinList(b));

    }
}
