如何定义这个类

时间:2016-11-20 11:38:06

标签: java scala

我有一个Scala + Java项目。

在java类中,我需要从同一个类扩展的2个类,它们的用法在scala中定义。

所以我有这个课

public class BaseUser {

     int id;
     private String name;
     public BaseUser withName(String name){
        this.name = name;
        return this;
     }


}

和扩展类

   public SpecificUser extends BaseUser {

      //inherit default for now
   }

然后在scala中我有一个DAO的定义

trait BaseUserDao {

    def insertUser(user:BaseUser) : Boolean

}


   class SpecificUserDao  extends UserDao{

       def insertUser(user : SpecificUser) : Boolean = {
            db.insert(user).isDefined
         }
   }

但这不编译,它说我必须实现insertUser(用户:BaseUser)而不是SpecificUser

如何定义它以便我可以为每个用户类型创建一个实现?

2 个答案:

答案 0 :(得分:2)

将您的实施更改为如下所示的内容。有一个类型参数T,其上限为BaseUser。在SpecificUserDao的声明中,只需制作T SpecificUser

trait BaseUserDao[T <: BaseUser] {
  def insertUser(user: T) : Boolean
}

class SpecificUserDao[SpecificUser]  extends BaseUserDao[SpecificUser] {
  override def insertUser(user: SpecificUser): Boolean = ???
}

或者您可以在特征中声明类型T

trait BaseUserDao {
  type T <: BaseUser
  def insertUser(user: T) : Boolean
}

class SpecificUserDao  extends BaseUserDao {
  override type T = SpecificUser
  override def insertUser(user: SpecificUser): Boolean = ???
}

答案 1 :(得分:-3)

你的构造函数应该这样写:

public class BaseUser {
    protected int id;
    protected String name;
    public BaseUser(String name){
    this.name = name;
    }
}