由此错误报告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中生成代码,并且必须尝试避免名称冲突,假设人们有时会选择意外的名称。
因此,假设在此示例中
除了告诉别人"不要那样做"。
是否有解决方案来避免这些冲突?
请注意,对于触发此问题的AVRO错误,我找到了一种解决方法。在这里,我正在寻找'通用答案'。
答案 0 :(得分:1)
我可以看到问题的两个解决方案:
1)使用仅由当前类名限定的方法名称而不是完全限定名称来调用方法:
public void option1() {
NamingClash.foo();
}
2)通过当前类对象的this
指针调用静态方法,并禁止“静态访问”警告。
@SuppressWarnings("static-access")
public void option2() {
this.foo();
}