3 ms·
Yes, it's all about nulls. I was curious to break it down from Curry-Howard correspondence (Types as Propositions) point of view. The line static class Const
by forkerenok 10y ago
Yes, it's all about nulls.
I was curious to break it down from Curry-Howard correspondence (Types as Propositions) point of view. The line
static class Constrain<A, B extends A> {}
reads as
for all propositions A and B, such that B implies A, proposition Constrain<A, B> holds.
While, the line:
Constrain<U,? super T> constrain = null;
kind of says:
Admit that there exists type X, such that T implies X, for which Constrain<U, X> holds.
Even though no proof (read constructed instance) that X implies U is provided.
If we look at concrete execution instance with String and Integer:
String implies Object, Serializable, Comparable<String>, CharSequence. None of those imply/extend Integer, which is required for truthful Constrain<U, ? super T> proposition.
Basically, ex falso quodlibet :)
EDIT: spacing, formatting, wording.