Ho letto con interesse ma in quel contesto trovo più ragionevole usare dei Tipi ad hoc per immagazzinare gli stati di un oggetto (RangedString piuttosto che RangedInt e via fantasticando).
A me capita, scrivendo o manutenendo codice, di osservare taluni casi in cui è possibile ridurre la quantità materiale di codice applicando annotazioni generici e riflessione, tutti insieme appassionatamente.
E' curioso come i tre strumenti si incastrino, forse per via del fatto che tutti presuppongono l'esistenza di una forma regolare: i generici limitati fondano meccanismi applicabili a tutto ciò che rispetta certi rapporti di parentela, le annotazioni creano all'interno dei membri di un Tipo degli insiemi di membri distinti dagli altri e la riflessione è in grado di scandire l'insieme dei membri e scegliere tra questi dei sottoinsiemi.
Non è un risultato eccezionalmente innovativo ma ha un valore pratico altrimenti non ottenibile.
Condivido la difficoltà nel trovare un'applicazione "runtime" delle annotazioni che faccia gridare al miracolo. Forse bisognerebbe cercarla in direzione della capacità di accomunare elementi altrimenti non correlati ma il rischio è quello di attribuire uno scopo ad una caratteristica del linguaggio non perchè utile ma perchè "diamine, almeno uno dovrà averlo"
.