Сгенерировано этим сообщением об ошибке AVRO-1814 Я уменьшил проблему до этого минимального примера на Java, который просто показывает ядро эффекта.Идентификация имени Java между именем переменной и именем верхнего уровня
package nl.basjes.experiment;
public class NamingClash {
String nl = "foo";
public void test() {
nl.basjes.experiment.NamingClash.foo();
}
private static void foo() {
// Do something
}
}
Попытка собрать это даст вам
error: cannot find symbol
nl.basjes.experiment.NamingClash.foo();
^
symbol: variable basjes
location: variable nl of type String
В AVRO код генерируется и он должен попытаться избежать конфликтов имен в предположении, люди иногда выбирают неожиданные имена.
Так предположим, что в этом примере
- полное имя класса в "тесте() метод необходим, чтобы избежать столкновения.
- Переменная 'nl' - это просто имя, используемое в определении схемы.
- Создание поля типа _nl__ и наличие геттеров и сеттеров будет изменением, которое нарушит совместимость с предыдущим, поскольку поле nl всегда было общедоступным.
Другое, чем говорить людям «Просто не делай этого».
Есть ли решение избежать этих конфликтов?
Обратите внимание, что для ошибки AVRO, вызвавшей этот вопрос, я нашел обходное решение. Здесь я ищу «общий ответ».
http://stackoverflow.com/questions/19406673/how-to-fully-qualify-a-class-whose-package-name-collides-with-a-local-member-nam –