@SuppressWarnings({"ConstantConditions", "unused"})
    public static <T extends BaseTuple> Object get(int i, T source) {
        if (i < 1 || i >= source.size() - 1) {
            throw new IndexOutOfBoundsException();
        }
        switch (i) {
            case 0:
                return ((Tuple1) source).getItem1();
            case 1:
                return ((Tuple2) source).getItem2();
            case 2:
                return ((Tuple3) source).getItem3();
            case 3:
                return ((Tuple4) source).getItem4();
            case 4:
                return ((Tuple5) source).getItem5();
            case 5:
                return ((Tuple6) source).getItem6();
            case 6:
                return ((Tuple7) source).getItem7();
            default:
                return ((TupleN) source).getAt(i);
        }
    }