6

このバグ レポート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 では、コードが生成され、人々が予期しない名前を選択することがあるという前提の下で、名前の衝突を回避しようとする必要があります。

したがって、この例では、

  1. 衝突を避けるために、「test()」メソッドの完全修飾クラス名が必要です。
  2. 変数「nl」は、スキーマ定義で使用される名前です。
  3. _nl__ のようなフィールドを生成し、getter と setter を使用すると、nl フィールドは常に public であるため、下位互換性が失われる変更になります。

人に「そんなことはやめなさい」と言う以外に。

これらの競合を回避する解決策はありますか?


この質問を引き起こした AVRO バグについては、回避策を見つけたことに注意してください。ここで私は「一般的な答え」を探しています。

4

1 に答える 1