import lombok.Getter;
import lombok.RequiredArgsConstructor;

public class RequiredArgsConstructorWithGeneric136<T> {

    @Getter
    @RequiredArgsConstructor(staticName = "of2")
    private static class Foo<T> {
        private final T object;
        private final int i;

        static <T> Foo<T> of(T object, int i) {
            return new Foo<T>(object, i);
        }
    }

    private <D> Foo<D> createFoo(D t, int i) {
        return new Foo<>(t, i);
    }

    public static void main(String[] args) {
        Foo<String> stringFoo = new Foo<>("", 2);

        Foo<String> foo1 = Foo.of("String2", 123);
        Foo<String> foo2 = Foo.of2("String2", 4423);

        System.out.println(stringFoo);
        System.out.println(foo1);
        System.out.println(foo2);
    }
}