2016-11-20 16 views
0

Ich habe ein Scala + Java-Projekt.So definieren Sie diese Klasse

In den Java-Klassen benötigte ich 2 Klassen, die aus derselben Klasse stammen, und ihre Verwendung ist in scala definiert.

So habe ich diese Klasse

public class BaseUser { 

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


} 

und die erweiterte Klasse

public SpecificUser extends BaseUser { 

     //inherit default for now 
    } 

Dann in scala ich eine Definition eines DAO haben

trait BaseUserDao { 

    def insertUser(user:BaseUser) : Boolean 

} 


    class SpecificUserDao extends UserDao{ 

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

Aber dies nicht kompiliert, es sagt, dass ich insertUser (Benutzer: BaseUser) anstelle von SpecificUser

implementieren muss

Wie definiere ich es, so dass ich eine Implementierung pro Benutzertyp erstellen kann?

+0

insert! == inserUser –

+0

@LajosArpad korrigiert stehen, es war ein Tippfehler –

+0

@LenaBru wo 'UserDao' kommen? Meinst du "BaseUserDao" – pamu

Antwort

2

ändern Ihre Implementierung etwas wie unten gezeigt. Haben Sie einen Typparameter T, dessen Obergrenze BaseUser ist. In der Deklaration von SpecificUserDao machen Sie einfach die TSpecificUser.

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

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

Oder Sie können den Typ T innerhalb des Merkmals erklären.

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

nachdem ich es so definiert habe, bekomme ich "someGetter von java ist kein Mitglied von Nothing" –

+0

@LenaBru Wo ist dieser Fehler im Code? – pamu

+0

Ist es möglich, dies über eine Art Live-Chat zu tun? –

-3

Ihr Konstruktor sollte wie folgt geschrieben werden:

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

Warum sollte ich einen Konstruktor in BaseUser haben? –

+1

withUser ist kein Konstruktor, es ist eine Verkettungsmethode –

Verwandte Themen