【发布时间】:2016-07-13 09:03:31
【问题描述】:
由这个错误报告AVRO-1814 触发,我将问题简化为这个 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 中生成代码,它必须尽量避免名称冲突,假设人们有时会选择意想不到的名称。
所以假设在这个例子中
- 需要“test()”方法中的完全限定类名以避免冲突。
- 变量“nl”只是架构定义中使用的名称。
- 生成像 _nl__ 这样的字段并具有 getter 和 setter 会破坏向后兼容性,因为 nl 字段一直是公共的。
除了告诉人们“不要那样做”。
有避免这些冲突的解决方案吗?
请注意,对于触发此问题的 AVRO 错误,我找到了一种解决方法。在这里,我正在寻找“通用答案”。
【问题讨论】:
标签: java namespaces name-collision