Consider never returning null here. If Bound has state representing whether it's an upper bound or lower bound, and whether it's bounded, then it could be more useful. You can already check whether `lower` is null anyway. Also, Bound could have comparison operations against instances of `T` so that you can check whether a value is less than the bound, equal to the bound, etc. an unbounded lower Bound would always return `false` for `isLessThan(T t)` for instance.