给定相同类型的对象,更新当前对象

时间:2018-07-24 13:08:45

标签: java oop

让我们假设我们有以下课程:

class Credentials implements ICredentials{
    String name;
    String surname;
    String email;

    public void update(ICredentials updatedCredentials){
            // do stuff here
    }

}

我想使用相同类型的对象而不使用getter或setter来更新当前类的字段(上述字符串)。有办法吗?

PS:菜鸟在这里。

2 个答案:

答案 0 :(得分:2)

您可以将要更新的对象传递给更新其内容的ICredentials方法:updateParam(Credentials)
在接口中添加此方法,实现该方法的Credentials可以使用参数的私有字段,因为类的实例可以在没有getter的情况下访问私有字段。

class Credentials implements ICredentials{

    public void update(ICredentials updatedCredentials){
         updatedCredentials.updateParam(this);
    }

    @Override
    public void updateParam(Credentials credentialsToUpdate){
         credentialsToUpdate.name= name;
         credentialsToUpdate.surname = surname;
         credentialsToUpdate.email= email;
    }
}

但这令人费解。
实际逻辑中的真正问题是您希望将ICredentials作为参数传递,而Credentials不是必需的。在这种情况下,界面需要提供一种提取姓名,姓氏和电子邮件信息的方法。
您不必严格地将这些方法视为 getters ,而是将其视为实现接口协定所需的方法。
没有它,要从接口提取数据,您应该做一些复杂的事情,或者从接口向下转换到子类,甚至更糟……

答案 1 :(得分:1)

假设updatedCredentialsCredential的相同实例,一种方法是您可以直接分配

public void update(ICredentials updatedCredentials){
    Credentials cred = (Credentials) updatedCredentials;
    this.name = cred.name;
     //rest of it
}

请记住,您需要将变量声明为public。但是这个过程非常丑陋。如果您可以使用gettersetter,那将是一个很好的解决方案,并且是最佳实践