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

Java 给定相同类型的对象更新当前对象,java,oop,Java,Oop,让我们假设我们有以下类: class Credentials implements ICredentials{ String name; String surname; String email; public void update(ICredentials updatedCredentials){ // do stuff here } } 我想使用相同类型的对象更新当前类的字段(上面的字符串),而不使用getter或set

让我们假设我们有以下类:

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

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

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


PS:noob在这里。

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

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

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

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

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

您可以将要更新的对象传递到更新其内容的
ICredentials
方法:
updateParam(凭据)

将此方法添加到接口中,实现它的
凭据
可以使用参数的私有字段,因为类的实例可以访问私有字段而无需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
作为参数传递,而
凭证不需要该参数。在这些情况下,界面需要提供提取姓名、姓氏和电子邮件信息的方法。
您不必严格地将这些方法视为吸气剂,而是作为实现接口契约所需的方法。
如果没有它,要从接口提取数据,您应该做一些复杂的事情,或者从接口向下转换到子类,或者更糟……

您可以将要更新的对象传递到更新其内容的
ICredentials
方法:
updateParam(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
作为参数传递,而
凭证不需要该参数。在这些情况下,界面需要提供提取姓名、姓氏和电子邮件信息的方法。
您不必严格地将这些方法视为吸气剂,而是作为实现接口契约所需的方法。
如果没有它,要从接口提取数据,您应该做一些复杂的事情,或者从接口向下转换到子类,或者更糟的…

ICredentials有哪些方法?我认为如果不使用getter和setter,这将不起作用。。。为什么不使用getter和setter?为什么不使用getter和setter?是否有编程方面的原因?ICredentials有哪些方法?我认为如果不使用getter和setter,这将不起作用。。。为什么不使用getter和setter?为什么不使用getter和setter?有什么原因吗?你救了我一天!非常感谢。我会仔细研究你说的话,并尝试想出一个更好的设计。你救了我一天!非常感谢。我会仔细研究你说的话,并设法想出一个更好的设计。