代码之家  ›  专栏  ›  技术社区  ›  musooff

Kotlin/Java中的简单强制转换

  •  1
  • musooff  · 技术社区  · 7 年前

    我有一个目标 User

    class User(){
        var id: Int? = null
        var name: String? = null}
    

    由于某些原因,我必须创建新对象 使用者 参数相同,我必须将数据从旧类型复制到新类型。

    class UserNew(){
        var id: Int? = null
        var name: String? = null}
    

    我正在寻找从旧类型转换为新类型的最简单方法。我想做的很简单

    var user = User()
    var userNew = user as UserNew
    

    但很明显,我越来越 This cast can never succeed UserNew 对象并设置每个参数是不可行的,如果我有 对象具有许多参数。有什么建议吗?

    5 回复  |  直到 7 年前
        1
  •  1
  •   Zulqarnain    7 年前

    要实现这一目标,您可以简单地使用Gson并避免使用样板代码:

    var user = User(....)
    
    val json = Gson().toJson(user)
    
    val userNew:UserNew =Gson().fromJson(json, UserNew::class.java)
    
        2
  •  4
  •   Frank Neblung    7 年前

    as 是科特林的演员接线员。但是 User 不是一个 UserNew . 因此,演员阵容失败。

    使用扩展函数在以下类型之间进行转换:

    fun User.toUserNew(): UserNew {
        val userNew = UserNew()
        userNew.id = id
        userNew.name = name
        return userNew
    }
    

    fun usingScenario(user: User) {
        val userNew = user.toUserNew()
    
        3
  •  2
  •   ppressives    7 年前

    如果您不想编写样板代码,可以使用一些库通过反射复制值(例如 http://mapstruct.org/ ),但这不是最好的主意。

        4
  •  1
  •   Sasi Kumar    7 年前

    对于这个案例,你应该遵循这个逻辑。

    fun main(args: Array<String>) {
    val user = User()
    user.id = 10
    user.name = "test"
    var userNew = user.toUserNew()
    println(userNew.id) // output is 10
    println(userNew.name)// output is test
     }
    
    
    class User() 
    {
    var id: Int? = null
    var name: String? = null
    
    fun toUserNew(): UserNew {
        val userNew = UserNew()
        userNew.id = id
        userNew.name = name
        return userNew
      }
    }
    
      class UserNew() {
      var id: Int? = null
      var name: String? = null
      }
    
        5
  •  0
  •   Pavel Niedoba    7 年前

    你有两个选择。创建接口并在两个类中实现它。然后你可以在两个地方使用这个接口(User,UserNew),如果这不是你想要的,我会在UserNew中使用copy构造函数,以User为参数,你可以创建新的

    NewUser nu = new UserNew(userOld)

    若你们有很多属性,那个么从ppressives中得到的答案就是最好的选择

        6
  •  0
  •   Gilkan Solizaris    7 年前

    要实现这一点,您可以使用继承的概念:

    https://www.programiz.com/kotlin-programming/inheritance

    例子:

    open class Person(age: Int) {
    // code for eating, talking, walking
    }
    
    class MathTeacher(age: Int): Person(age) {
    // other features of math teacher
    }