Scala では、以下のようなオブジェクト プライベート変数とメソッドの名前の衝突が許容されることが経験的に発見されました。
class Test {
private[this] var x = 1
def x(): String = this.x.toString
}
このコードは、少なくとも Scala 2.10 では有効であり、期待どおりの結果が得られます (Java に逆コンパイルされます)。
public class Test {
private int x;
public String x() {
return BoxesRunTime.boxToInteger(x).toString();
}
public Test() {
x = 1;
}
}
問題は、この動作が設計によるものであるという信頼できる証拠を仕様で見つけることができなかったため、後の Scala リリースでこの動作を信頼できるかどうかわからないことです。それで、誰か私にそのような知識の源を提案できますか?
更新: 私の目標は、このアプローチを使用して、Hibernate データ モデルを Scala クラスにマップすることです。Hibernate が Scala コレクションをサポートできるようにする簡単な方法はないため、Java コレクションをプライベート フィールドにマップし、それを名前付きのアクセサー メソッドで Scala コレクションにラップしたいと考えました。重要な要件は、フィールドとメソッドを同じ名前で保持することです。これは、Hibernate コレクションの論理名も保持する必要があるためです (たとえば、HQL で参照するため)。