让我们假设我们有以下课程:
class Credentials implements ICredentials{
String name;
String surname;
String email;
public void update(ICredentials updatedCredentials){
// do stuff here
}
}
我想使用相同类型的对象而不使用getter或setter来更新当前类的字段(上述字符串)。有办法吗?
PS:菜鸟在这里。
答案 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)
假设updatedCredentials
是Credential
的相同实例,一种方法是您可以直接分配
public void update(ICredentials updatedCredentials){
Credentials cred = (Credentials) updatedCredentials;
this.name = cred.name;
//rest of it
}
请记住,您需要将变量声明为public
。但是这个过程非常丑陋。如果您可以使用getter
和setter
,那将是一个很好的解决方案,并且是最佳实践