2016-11-20 26 views
0

私はScala + Javaプロジェクトを持っています。このクラスを定義する方法

Javaクラスでは、同じクラスから拡張された2つのクラスが必要で、その使用法はscalaで定義されています。

だから私は、その後、Scalaで私はDAO

trait BaseUserDao { 

    def insertUser(user:BaseUser) : Boolean 

} 


    class SpecificUserDao extends UserDao{ 

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

の定義を持っている

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 
    } 

このクラスを持っていますが、これはコンパイルされません、それは、私はinsertUser(ユーザー:BaseUser)の代わりにSpecificUserを実装しなければならないと言います

ユーザータイプごとに実装を作成できるように定義するにはどうすればよいですか?

+0

insertUser!== inserUser –

+0

@LajosArpad修正立って、それは 'UserDao'から来ている –

+0

@LenaBruタイプミスでしたか? 'BaseUserDao' – pamu

答えて

2

変更何かにあなたの実装を以下に示すように。上限パラメータがBaseUserのタイプパラメータTを用意してください。 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はJavaのメンバーではありません" –

+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はコンストラクタではなく、そのチェーンメソッド –

関連する問題