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?有什么原因吗?你救了我一天!非常感谢。我会仔细研究你说的话,并尝试想出一个更好的设计。你救了我一天!非常感谢。我会仔细研究你说的话,并设法想出一个更好的设计。