come aggiungere un metodo alla classe esistente utilizzando l’elaborazione delle annotazioni in java / Kotlin?

sono nuovo all’elaborazione delle annotazioni e alla generazione di codice. voglio scoprire come posso eseguire tale operazione come aggiungere un nuovo metodo alla classe esistente. ecco un esempio di quello che voglio fare:

supponiamo di avere una classe con annotazioni personalizzate come questa:

class SourceClass {
    @CustomAnnotation
    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    @CustomAnnotation
    fun annotatedFun2(vararg argument: Any) {
        //Do something
    }

    fun someOtherFun() {
        //Do something
    }
}

e il risultato che voglio ottenere – copia estesa di quella classe:

class ResultClass {
    fun hasFunWithName(name: String): Boolean {
        return (name in arrayOf("annotatedFun1", "annotatedFun2"))
    }

    fun callFunByName(name: String, vararg arguments: Any) {
        when (name) {
            "annotatedFun1" -> annotatedFun1(*arguments)
            "annotatedFun2" -> annotatedFun2(*arguments)
        }
    }

    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    fun annotatedFun2(vararg argument: Any) {
        //Do something
    }

    fun someOtherFun() {
        //Do something
    }
}

ho già scoperto come creare un processore di annotazione. sto cercando un metodo per salvare tutti i campi esistenti, proprietà e metodi in classe di origine e per aggiungere alcuni metodi più ad esso.

se è possibile modificare classe senza crearne una nuova – sarebbe perfetto, ma in tutti i tutorial vengono create solo nuove classi e non ho trovato alcun esempio in cui tutti i contenuti della classe sorgente vengono copiati in un altro.

per favore, non consigliamo di usare riflessione. ho bisogno di questo per Android e quindi la riflessione non è la causa opzione di costo delle risorse. sto cercando soluzione compile-time.

è necessario per il linguaggio script personalizzato implementato in app e dovrebbe essere utilizzato per semplificare la struttura delle classi wrapper. quando questo lavoro è fatto direttamente in codice – sembra terribile quando tale numero di metodo supera 20 per classe.

EN From: How to append a method to existing class using annotation processing in java / kotlin?

More similar articles:

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *