受此错误报告AVRO-1814的影响,我在Java中将问题简化为这个最小化的示例,只需显示其核心效果。
尝试编译此代码会出现以下情况:
在AVRO中,代码是生成的,必须尝试避免名称冲突,因为人们有时会选择意外的名称。
所以在这个例子中假设:
1. 'test()'方法中需要完全限定的类名以避免冲突。 2. 变量'nl'只是模式定义中使用的名称。 3. 生成一个类似_nl__的字段并有getter和setter将导致向后不兼容性的更改,因为nl字段始终是公共的。
除了告诉人们“不要那样做”之外,是否有解决避免这些冲突的方法?
请注意,在触发此问题的AVRO错误中,我找到了一种解决方法。在这里,我正在寻找“通用答案”。
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中,代码是生成的,必须尝试避免名称冲突,因为人们有时会选择意外的名称。
所以在这个例子中假设:
1. 'test()'方法中需要完全限定的类名以避免冲突。 2. 变量'nl'只是模式定义中使用的名称。 3. 生成一个类似_nl__的字段并有getter和setter将导致向后不兼容性的更改,因为nl字段始终是公共的。
除了告诉人们“不要那样做”之外,是否有解决避免这些冲突的方法?
请注意,在触发此问题的AVRO错误中,我找到了一种解决方法。在这里,我正在寻找“通用答案”。