簡體   English   中英

對Kotlin類實現java接口

[英]Implementation of java interface to Kotlin class

情景/問題

在下面的代碼示例中,我實現了從java到kotlin Message IMessage 但是當我將值傳遞給message變量時,它表示val cannot be reassigned

val message = Message()
message.user = Author()
message.text = ""
messate.createdAt = Date()
message.id = ""

public interface IMessage {
    String getId();
    String getText();
    IUser getUser();
    Date getCreatedAt();
}

class Message : IMessage {
    private var id: String = ""
    private var createdAt = Date()
    private var user = Author()
    private var text: String = ""

    override fun getId(): String {
        return id
    }

    override fun getCreatedAt(): Date {
        return createdAt
    }

    override fun getUser(): IUser {
        return user
    }

    override fun getText(): String {
        return text
    }

}

  1. 代碼的哪一部分是錯的?

預期結果

 val message = Message()
 message.id = ""
 message.text = ""
 message.user = Author()

請將用戶對象更改為IUser,因為我不確定它包含的內容。

接口

public interface IMessage {

    String getId();

    void setId(@NonNull String id);

    String getText();

    void setText(@NonNull String text);

    String getUser();

    void setUser(@NonNull String user);

    Date getCreatedAt();

    void setCreatedAt(@NonNull Date createdAt);
}

消息類

class Message : IMessage {
    override fun setId(id: String) {
        this.id = id
    }

    override fun setText(text: String) {
        this.text = text
    }

    override fun setUser(user: String) {
        this.user = user
    }

    override fun setCreatedAt(createdAt: Date) {
        this.createdAt = createdAt
    }


    override fun getId(): String {
        return id
    }

    override fun getText(): String {
        return text
    }

    override fun getUser(): String {
        return user
    }

    override fun getCreatedAt(): Date {
        return createdAt
    }

    override fun toString(): String {
        return StringBuilder().append(id).append(user).append(text).append(createdAt.toString()).toString()
    }

    private var id: String = "id"
    private var createdAt: Date = Date()
    private var user: String = "user"
    private var text: String = "text"
}

MainActivity Code onCreate

        val message = Message()
        message.user = "Ganesh"
        message.createdAt = Date()
        message.id = "1"
        message.text = "Hello World"

        Log.e("First message object ", message.toString())

        message.user = "Tikone"
        message.createdAt = Date()
        message.id = "2"
        message.text = "Hello Kotlin"

        Log.e("After message object ", message.toString())

結果

09-11 12:30:40.188 29575-29575 / com.sysanenet.myapplication E / First message object:1GaneshHello WorldTue Sep 11 12:30:40 GMT + 05:30 2018

09-11 12:30:40.188 29575-29575 / com.sysanenet.myapplication E / After message object:2TikoneHello KotlinTue Sep 11 12:30:40 GMT + 05:30 2018

在下面的代碼是我的答案,但我想我打破了kotlin getter setter的規則,因為我創建了setter ..

class Message : IMessage {
    private var id: String? = null
    private var text: String? = null
    private var user: IUser? = null
    private var createdAt: Date? = null

    fun setId(id: String) {
        this.id = id
    }

    fun setText(text: String) {
        this.text = text
    }

    fun setUser(user: IUser) {
        this.user = user
    }

    fun setCreatedAt(createdAt: Date) {
        this.createdAt = createdAt
    }

    override fun getId(): String? {
        return id
    }

    override fun getText(): String? {
        return text
    }

    override fun getUser(): IUser? {
        return user
    }

    override fun getCreatedAt(): Date? {
        return createdAt
    }

}

我的結果

 val message = Message()
 message.setId("")
 message.setText("")
 message.setUser(Author())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM