2016-11-20 27 views
0

我有一個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 
    } 

然後在斯卡拉我有一個DAO

trait BaseUserDao { 

    def insertUser(user:BaseUser) : Boolean 

} 


    class SpecificUserDao extends UserDao{ 

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

的定義,但是這並不能編譯,它說我必須實現insertUser(user:BaseUser)而不是SpecificUser

如何定義它以便我可以創建每個用戶類型的實現?

+0

insertUser!== inserUser –

+0

@LajosArpad站在糾正,這是一個錯字 –

+0

@LenaBru哪裏是'UserDao'來自哪裏?你的意思是'BaseUserDao' – pamu

回答

2

更改您的實現的東西,如下圖所示。有一個類型參數T,其上限爲BaseUser。在SpecificUserDao的聲明中,只需製作TSpecificUser

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 = ??? 
} 
+0

定義它之後就像這樣,我得到「someGetter from java不是Nothing的成員」 –

+0

@LenaBru代碼中的錯誤在哪裏? – pamu

+0

是否可以通過某種實時聊天完成此操作? –

-3

你的構造函數應該這樣寫:

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

爲什麼我應該在BaseUser中有一個構造函數? –

+1

withUser不是一個構造函數,它的鏈接方法 –