我对set方法有疑问。如果可能,请提供一些细节。 我想知道为什么我们将set方法与类名一起使用。
public class Mymainclass {
Private class ClassC {
Private Mysecondclass sec = null;
public void setMymainclass(Mysecondclass second){
Mymainclass.sec= second;
}
}
}
它只是设置sec变量值吗?如果是,为什么有类名称?
答案 0 :(得分:1)
似乎你在一个类中使用“setter方法”混淆了“类构造函数”。
因此,在您的情况下,方法的名称应为“setSec”而不是setMainClass。 也就是说,如果您想在初始化类之后修改私有变量“sec”,那么您可以选择使用setter方法。
另一方面,您也不能使用setter方法,只需在首次创建类时初始化sec变量。要做到这一点,你将不得不创建一个构造函数。 这个类的构造函数如下所示:
Mymainclass(Mysecondclass sec){
this.sec = sec;
}
这样,只要创建Mymainclass的新实例,就可以传递Mysecondclass对象。
同时尝试确保在标记类时,使类名中的每个单词都具有其首字母大写:MySecondClass和MyMainClass !!
答案 1 :(得分:1)
首先,如果您遵循良好做法,您的方法应该被称为“setSeconds”。试想一下,如果你在课堂上添加会议成员,会有多么混乱。
编码设置器和getter有两个主要原因。
第一个是务实的。如果你想调用内省和java bean的魔力,那么你需要遵循这些约定。像FreeMarker这样的几个库/ API绝对依赖于在你的类中使用getter和setter方法。
第二个与好的设计有关。考虑一下你有一个叫做秒的公共成员。你的任何用户都可以通过编码来设置它。
instanceOfYourClass.seconds = 60;
这很好,除非您想对此值施加42秒的仲裁限制。要验证该值并将其设置为最多42秒,您现在需要一种方法来执行此操作。因此,您班级的每个用户现在必须将其代码更改为: -
instanceOfYourClass.setSeconds(60);
因此,从一开始就构建getter和setter,你可以灵活地构建类,以便在课堂上做更多异国情调的事情,同时为你的类用户提供一个稳定的界面,不会让他们改变他们的代码每次功能发生微小变化。
答案 2 :(得分:1)
我认为你混淆的部分原因是你提供的例子是错误的代码!您没有根据其参数的类命名一个setter,而是根据您正在设置的对象的属性对其进行命名。例如,您的示例的规范“正确”版本将是:
public class Mymainclass {
private Mysecondclass sec= null;
public void setSec(Mysecondclass second){
this.sec= second;
}
}
具有映射到属性名称的setter允许从UI到持久性的所有类型的不同框架以及它们之间以抽象方式操纵对象。例如,如果您告诉数据库层名为“sec”的属性映射到特定数据库列,它可以使用反射来查找名为“setSec
”的方法并为您设置它!
当你有很多相同类型的属性,很多String
s,很多BigDecimal
s等等时,有很多方法命名为'set'的想法也会失效。如果有两个标准只能使用'set'并且必要时使用属性名称,那将是非常奇怪的。 (并且你会发现自己经常非常重构那些'套''方法。)
答案 3 :(得分:0)
在面向对象编程中,一个好的做法是公开getter和setter以允许其他类与类内容交互,而不是将成员变量公开。
即使大部分时间,至少在班级的第一个版本中,也没有比实际的赋值语句更多的东西,这将允许您稍后添加其他行为: