Scala中的自标题字段和访问器

Scala中的自标题字段和访问器,scala,Scala,根据经验发现,Scala允许对象私有变量和方法的名称冲突,如下所示: class Test { private[this] var x = 1 def x(): String = this.x.toString } 这段代码至少对Scala 2.10有效,并产生了我所期望的结果(反编译为Java): 公共类测试{ 私人INTX; 公共字符串x(){ 返回BoxesRunTime.boxToInteger(x.toString(); } 公开考试(){ x=1; } } 问题是,我不确

根据经验发现,Scala允许对象私有变量和方法的名称冲突,如下所示:

class Test {
  private[this] var x = 1
  def x(): String = this.x.toString
}
这段代码至少对Scala 2.10有效,并产生了我所期望的结果(反编译为Java):

公共类测试{
私人INTX;
公共字符串x(){
返回BoxesRunTime.boxToInteger(x.toString();
}
公开考试(){
x=1;
}
}
问题是,我不确定在以后的Scala版本中是否可以依赖这种行为,因为我无法在规范中找到权威性的证据证明这种行为是由设计造成的。那么,有谁能向我推荐这样的知识来源吗


更新:我的目标是使用这种方法将Hibernate数据模型映射到Scala类。由于没有简单的方法使Hibernate能够支持Scala集合,所以我想将Java集合映射到一个私有字段中,然后用一个自命名的访问器方法将该字段包装到Scala集合中。关键要求是保持字段和方法具有相同的名称,因为我还希望保留逻辑Hibernate集合名称,例如在HQL中引用它。

这些冲突是完全正常的。但是请记住,读取代码可能会成为一个问题,因为这些冲突(如果您需要的话)应该只针对getter/setter出现。 在其他情况下,请使用清晰的方法名称,如:

def xAsString():
此线程也会有所帮助


为什么不使用case类呢?它会给你同样的行为,如果你想改变x,只需使用内置的复制功能。有趣的是,如果你不使用
def x()
中的参数,它就不会编译