Do this check in the constructor instead (or a static factory method). You'll want to be careful in how you calculate the baseType and you'll definitely want to throw if you can't find a baseType for which all elements are coercibleTo. You basically want to find the common base PDataType. Something like the first loop in CaseExpression:

    private static List<Expression> coerceIfNecessary(List<Expression> children) throws SQLException {