Kotlin/Java中的简单强制转换

Kotlin/Java中的简单强制转换,kotlin,casting,Kotlin,Casting,我有一个对象User定义如下 class User(){ var id: Int? = null var name: String? = null} 由于某些原因,我必须创建具有相同参数的新对象User,并且必须将数据从旧类型复制到新类型 class UserNew(){ var id: Int? = null var name: String? = null} 我正在寻找从旧类型转换为新类型的最简单方法。我想做的很简单 var user = User() v

我有一个对象
User
定义如下

class User(){
    var id: Int? = null
    var name: String? = null}
由于某些原因,我必须创建具有相同参数的新对象
User
,并且必须将数据从旧类型复制到新类型

class UserNew(){
    var id: Int? = null
    var name: String? = null}
我正在寻找从旧类型转换为新类型的最简单方法。我想做的很简单

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

但是很明显,我得到了
这个演员阵容永远不会成功
。如果我有一个包含大量参数的
User
对象,那么创建一个新的
UserNew
对象并设置每个参数是不可行的。有什么建议吗?

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

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

NewUser nu=newusernew(userOld)


如果你有很多属性,那么ppressives的答案是way to go

,因为
是kotlin的cast操作符。但是
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()

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

例如:

open class Person(age: Int) {
// code for eating, talking, walking
}

class MathTeacher(age: Int): Person(age) {
// other features of math teacher
}

对于这个案例,你应该遵循这个逻辑。 注:@Frank Neblung我执行的答案

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
  }
fun main(args:Array){
val user=user()
user.id=10
user.name=“测试”
var userNew=user.tusernew()
println(userNew.id)//输出为10
println(userNew.name)//输出为test
}
类用户()
{
变量id:Int?=null
变量名称:字符串?=null
fun-tusernew():UserNew{
val userNew=userNew()
userNew.id=id
userNew.name=名称
返回userNew
}
}
类UserNew(){
变量id:Int?=null
变量名称:字符串?=null
}

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

var user = User(....)

val json = Gson().toJson(user)

val userNew:UserNew =Gson().fromJson(json, UserNew::class.java)

什么是UserNew?哦,刚刚编辑过。只需在UserNew中创建一个以用户为参数的构造函数。问题解决了。@jwenting好吧,正如我所说的,如果我在
User
object中有很多字段,那么这是不可行的。使用一个工具,就像我在下面的答案中实现了你的答案一样。正如我在问题中提到的,如果我有50个字段而不是2个字段(id和名称),这种方法是不可行的。正如大多数人所说,我认为这是唯一的解决办法。