public void setTo(String to) {
this.to = to;
}
public String getTo() {
return to;
}
上面的代码有什么作用?在我的项目文件中,我搜索了setTo函数,但没有找到setTo((,那么它是如何调用的呢?而这指的是?
在面向对象编程中,其他类可以访问程序中的某些变量是错误的,因为当您编写较大的程序时,某些变量可以在您不知情的情况下更改。为了阻止这种情况,我们将类中的变量设为私有,并创建 getter 和 setter。第一种方法是一个 setter,它可以将类中的私有变量设置为用户想要的变量。这将阻止许多错误的发生。这
this
是一个关键字,用于调用您所在的当前类。如果作为参数传入的变量与在类顶部声明的私有变量相同,我们将使用它来引用类顶部的变量。
这两个方法是类的属性to
的setter-getter
。
您的源代码可能不会调用这些方法,但这些方法仍然由某些框架/第三方库调用,例如JSF
,Spring
您在项目中使用的那些。
看起来你有三个问题。我会按顺序回答他们:
上面的代码有什么作用?
这些方法允许类外部的代码设置和检索类中的to
变量值,即使它已声明为 private。
在我的项目文件中,我搜索了setTo函数,但没有找到setTo((,那么它是如何调用的呢?
Spring 使用 setter 方法来执行依赖注入。基本上,Spring库中有Java,它会自动查找这些变量名称,并调用以变量命名的相应方法,名称前面有"set"。
IDE 可以自动生成 getter 和 setter,并且由于您需要 Spring 的 setter,因此人们也倾向于让 IDE 生成 getter,即使他们不打算使用它们。
而这指的是?
this
是一个范围关键字。
this.to
是指名为 to
的变量,该变量是这些 getter/setter 方法所在的类的一部分。不带 'this.
' 的 ' to
' 是指参数定义中的(String to)
,即调用将传入的参数定义。
本质上,"Getters"和"Setters"是专门设计用于与字段交互而不直接操作字段的方法。 这称为"字段封装">
https://en.wikipedia.org/wiki/Field_encapsulation
您不是直接访问字段,而是访问它的方法。 您可以限制代码中的使用,即不允许任何获取或设置,或两者兼而有之。
如果您有权访问字段本身,则可以执行任何操作,但是如果您拆分字段的方法,则可以
- 更好地操作字段操作。
- 使您的代码更简洁(
text.setName(name)
比编写text = "name";
更容易理解 - 限制对部分代码的访问(取决于谁在使用您的代码(。
某些代码段还专门使用 getter/setter,而不是字段,因此确保您的字段具有 getter/setter 是一种很好的做法。
例如,如果未设置 getters/setters,Apache BeanUtils.copyBean(( 将不会复制 bean。
你问什么
public void setTo(String to) {
this.to = to;
}
public String getTo() {
return to;
}
意思是这样,而不是说
String setTo = "hello";
or
String setTo2 = setTo;
你可以做
setTo("hello");
or
String s2 = getTo();
所以setTo 需要一个字符串参数,然后将我们的"to"字段String to;
参数的值。
然后,getTo 将获取我们的字段,并将其返回。
在某些情况下,人们会在 set/get 语句中添加额外的代码,但我不确定这有多普遍。
希望这有帮助!
这些是名为">to"的类全局字符串变量(或属性(的 Getter 和 Setter 方法。相关的类通常与 getter 和 setter 方法中包含的类完全相同,因为它们相关的变量也是如此。如果您查看类构造函数下方的类代码顶部,您应该能够找到字符串变量">to",例如:
private String to = ""; // or something similar
通常,如果有一个名为"to"的变量,则还有另一个名为">from"的变量(但并非总是如此(,并且它的to也可能在类中包含getter和setter方法。
Getter 和 Setter 方法允许您在运行时从另一个类检索和修改一个类中包含的变量数据,例如:
MySpecialClass myClass = new MySpecialClass();
// Use the 'to' variable getter to retrieve its current
// contents and place those contents into the 'toVar' variable.
String toVar = myClass.getTo();
// Display the contents...
System.out.println(toVar);
// Set the 'to' variable within the MySpecialClass Class
// to hold the string "I hold this now"...
myClass.setTo("I hold this now");
// Use the 'to' variable getter again to retrieve its new
// contents and place those contents into the 'toVar' variable.
toVar = myClass.getTo();
// Display the contents again...
System.out.println(toVar);
现在,包含在 MySpecialClass 中的代码可以使用带有新数据值的">to"变量。你会注意到Java类库以这种方式做事,与为JButton或JLabel等设置特定属性非常相似。