My first thought was to abuse Int vs Int?, but that changes semantics and you're probably not using T just for javaClass<T>().
Next would be an argument on reified, but it’s a (soft) keyword, not an annotation. So, it could be an argument on inline.
- inline and reified always go together, so it shouldn’t be a problem, unless you have plans for that to change.
- inline already has an argument (InlineStrategy).
The default would be how it works now. An argument would change the reification to use primitive classes. Note that since this happens on the declaration side rather than on use, it would make the reification work with either primitive or wrapper classes, not both. Imho this is acceptable, if you need primitive classes you’re probably doing something applicable to primitives only.