Java代码-如何设置对象变量
我只是在学习,想知道一段设置对象变量的代码 在下面的测试类中设置对象变量bfield的正确方法是什么Java代码-如何设置对象变量,java,Java,我只是在学习,想知道一段设置对象变量的代码 在下面的测试类中设置对象变量bfield的正确方法是什么 public class test { private String afield; private String bfield; public test() { buildList(); } public void buildList() { some code to derive and populate afield. this.bfield = this.a
public class test {
private String afield;
private String bfield;
public test() {
buildList();
}
public void buildList() {
some code to derive and populate afield.
this.bfield = this.afield; // ( 1)
setBfield(afield); // (2) say getter and setters do exist
bfield = afield; // (3)
}
正确的方法是什么?I选项1确定还是选项2?setter/getter更可取,因为您也可以在这些访问器方法中封装一些处理
另请参见
另请参见
- 当然,这三种方法中的任何一种都能奏效
我通常不喜欢选项1,除非我区分实例成员和参数。例如,
public void buildList(String bfield){this.bfield=bfield;}
<代码>这个。一切都是额外的噪音;如果您不需要它,它所做的就是为bug提供更多的代码来隐藏。:)
选择2更能证明未来;如果您更改了某些内容,因此必须将其他内容与bfield
一起设置(或者如果bfield
根本不需要备份字段,例如,如果设置它,则应在子对象上设置一些内容),您会很高兴调用setBfield
——因为您没有十几个位置可以更改设置bfield
的代码。基本上,如果您需要并且已经有了setBfield
方法,我建议在大多数情况下使用它
如果您知道某个字段始终包含在对象本身中,并且独立于其他字段,则选项3通常更快。另外,如果您不希望外部代码也能够设置
b字段
,那么您不必创建setter(读取:污染您的界面)。当然,这三者中的任何一个都可以工作
我通常不喜欢选项1,除非我区分实例成员和参数。例如,public void buildList(String bfield){this.bfield=bfield;}
<代码>这个。一切都是额外的噪音;如果您不需要它,它所做的就是为bug提供更多的代码来隐藏。:)
选择2更能证明未来;如果您更改了某些内容,因此必须将其他内容与bfield
一起设置(或者如果bfield
根本不需要备份字段,例如,如果设置它,则应在子对象上设置一些内容),您会很高兴调用setBfield
——因为您没有十几个位置可以更改设置bfield
的代码。基本上,如果您需要并且已经有了setBfield
方法,我建议在大多数情况下使用它
如果您知道某个字段始终包含在对象本身中,并且独立于其他字段,则选项3通常更快。另外,如果您不希望外部代码也能够设置
b字段
,那么您不必创建setter(读取:污染您的界面)。使用eclipse!让它为你做一些工作。
像这样创建一个类测试
public class Test {
private String afield;
private String bfield;
}
然后做这些:
- 右键单击->选择“源”->生成构造函数
- 右键单击->选择“源”->使用字段生成构造函数
- 右键单击->选择“源”->生成getter/setter
完成:)并执行JavaBean约定的查找。您的代码会使任何java exp开发人员都感到震惊:) 使用eclipse!让它为你做一些工作。 像这样创建一个类测试
public class Test {
private String afield;
private String bfield;
}
然后做这些:
- 右键单击->选择“源”->生成构造函数
- 右键单击->选择“源”->使用字段生成构造函数
- 右键单击->选择“源”->生成getter/setter
完成:)并执行JavaBean约定的查找。您的代码会使任何java exp开发人员都感到震惊:) 在我看来,它们都是正确的……我不得不说,为了抵制否决这个问题的强烈冲动,请使用Getter和Setter。但是如果Setter方法不只是设置值(例如,它可能会触发
BFieldChangedEvent
或类似的操作)那么你可能不想使用setter。它们在我看来都是正确的……我不得不说,抵制强烈的否决这个问题的冲动,使用Getter和setter。但是如果setter方法不只是设置值(例如,它可能触发BFieldChangedEvent
或类似的事件)那你可能不想用二传,谢谢大家。我将使用Getter和setter,但同时让我使用aks-如果我将这两个变量组合在一起,我认为为了清晰起见,说{this.aField==this.bField}会更有意义。如果我错了,请纠正我。@Peter:如果afield
和bfield
不是本地人(或参数),这对澄清没有多大帮助;那就是噪音。谢谢大家。我将使用Getter和setter,但同时让我使用aks-如果我将这两个变量组合在一起,我认为为了清晰起见,说{this.aField==this.bField}会更有意义。如果我错了,请纠正我。@Peter:如果afield
和bfield
不是本地人(或参数),这对澄清没有多大帮助;那就是噪音。