/ / Determina le classi base non in lib standard (Java o Scala) con reflection in runtime - java, scala, reflection

Determina le classi base non in lib standard (Java o Scala) con reflection in runtime - java, scala, reflection

Sto generando definizioni GraphQL da Scalatipi ma non riesco a trovare nulla nell'API di runtime reflection per ottenere solo classi base che sono "definite dall'utente", cioè non fanno parte della libreria standard di Scala o Java.

A partire da ora ho solo un set di quelli che conosco, ad es. Any, Object e circa altri 8. Questi sono solo nella lista perché sono ciò che è apparso quando stavo scrivendo i test unitari. Idealmente non voglio una lista manuale, sembra fragile come i nuovi tipi sono aggiunti, probabilmente si romperà.

Non so se questo è possibile con i macro mache non è un'opzione, dopo aver sperimentato con i macro ci sono stati troppi bug, incluso il fatto che il compilatore si è bloccato e la correzione per quel bug è supposta essere nell'ultimo zinc ma non posso usarlo perché sto usando Gradle che può usare solo il 0.x.x serie di zinco a causa di cambiamenti nello spazio dei nomi nel 1.x serie.

Quindi, tutto ciò che viene detto, qualcuno sa se c'è un mezzo per determinare baseclass di un tipo che non proviene dalle librerie standard?

risposte:

1 per risposta № 1

Non penso che una tale caratteristica esista e nemmenodovrebbe esistere In particolare, non credo che il termine "libreria standard" sia veramente ben definito nel contesto del tuo problema, voglio dire perché esattamente dovrebbe escludere classi dalla libreria standard ma non da altre librerie popolari dalle quali si dipende? sono anche alcuni tipi abbastanza complicati nella libreria standard (es java.text.DateFormat o org.w3c.dom.Document). Sì, probabilmente non li esponi adesso ma questo è solo per ora.

Penso che il modo corretto sia avere unelenco bianco esplicito di tutte le classi base e / o pacchetti che si desidera esporre come parte del contratto API e utilizzarlo per il filtraggio. Potresti anche provare a usare una lista nera (come java.*, javax.*, scala.*) per filtrare la "libreria standard" e potrebbe funzionare per qualche tempo, ma non credo che sia una buona idea.