如何在 Scala 中覆盖特征变量名称

kom*_*mbo 2 java scala

我有如下的Scala特征

trait Id {
            @javax.persistence.Id
            @GeneratedValue(strategy=GenerationType.IDENTITY)
            @BeanProperty
            var id: Long = _
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个实体 (Person),我想扩展 Id 特征但将 id 列名称更改为 personid。我怎样才能做到这一点?
下面的人物片段:

@NamedQuery(name=”findAll”,query=”select p from Person p”)
class Person extends Id {
    @BeanProperty
    @Column(name=”personid”)
    def personid = id
}
Run Code Online (Sandbox Code Playgroud)

axe*_*l22 5

您可以引入一个personid返回值的方法id

trait Person extends Id {
  def personid = id
}
Run Code Online (Sandbox Code Playgroud)

删除id成员 inPerson将违反子类实例必须始终可用的原则,就好像它们是基类的实例一样。也就是说,如果Personextends Id,那么您必须能够调用它的所有方法id,否则您将无法将 type 的对象分配给 typePerson的引用Id

因此,如果您扩展Id,扩展的特征/类将始终具有id.

但是,您可以通过将包id设为私有来限制基本特征中的可见性:Idid

private[package_name] var id: Long = _
Run Code Online (Sandbox Code Playgroud)