Трудно понять, почему это так, и есть ли приличный способ обойти это?
Простой ответ: потому что вы (способны) знать больше, чем компилятор.
Вы проверяете, что builderClass
равно Row
. В том случае, если это так, компилятор не «запоминает», что: то есть, вы должны продолжать говорить компилятору, что он есть, например, путем приведения.
Но тогда компилятор не знать что-нибудь об отношениях между Row
и RowBuilder
классами. С точки зрения системы типов нет никакой связи: это всего лишь два класса.
Итак, есть ли приличный способ обойти это? Нет, не совсем. Если возможно, старайтесь не делать это с генериками.