Attivato da questa segnalazione di bug AVRO-1814 Ho ridotto il problema a questo caso di esempio minimale in Java che mostra semplicemente il nucleo dell'effetto.Nome collisione Java tra variabile e nome del pacchetto di livello superiore
package nl.basjes.experiment;
public class NamingClash {
String nl = "foo";
public void test() {
nl.basjes.experiment.NamingClash.foo();
}
private static void foo() {
// Do something
}
}
Cercando di compilare questo vi darà
error: cannot find symbol
nl.basjes.experiment.NamingClash.foo();
^
symbol: variable basjes
location: variable nl of type String
Nel AVRO il codice viene generato e si deve cercare di evitare conflitti di nomi sotto la gente assunzione a volte scegliere i nomi inaspettati.
Quindi, assumere in questo esempio che
- Il nome completo della classe nel 'test()' è necessaria metodo per evitare una collisione.
- La variabile 'nl' è solo il nome utilizzato nella definizione dello schema.
- Generare un campo come _nl__ e avere getter e setter sarebbe una modifica che interromperà la compatibilità perché il campo nl è sempre stato pubblico.
Altro che dire alla gente "Non farlo".
Esiste una soluzione per evitare questi conflitti?
Si noti che per l'errore AVRO che ha attivato questa domanda ho trovato una soluzione alternativa. Qui sto cercando la 'risposta generica'.
http://stackoverflow.com/questions/19406673/how-to-fully-qualify-a-class-whose-package-name-collides-with-a-local-member-nam –