public class Test {

    public static void main(String[] args) {
        IntegralChecker<MyInteger> checker = new IntegralChecker<>();
        int result = checker.checkIntegral(42);
        System.out.println(result);
    }
}

interface IntegralConstraint<T> {

    boolean isIntegral();
}

class MyInteger implements IntegralConstraint<MyInteger> {

    private final int value;

    public MyInteger(int value) {
        this.value = value;
    }

    @Override
    public boolean isIntegral() {
        return true;
    }
}


class IntegralChecker<T extends IntegralConstraint<T>> {
    public <U extends IntegralConstraint<U>> U checkIntegral(int value) {
        return (U) new MyInteger(value);
    }
}