[英]How do getters and setters work?
我来自 php 世界。 您能否解释一下 getter 和 setter 是什么,并给您一些例子?
教程并不是真正需要的。 阅读封装
private String myField; //"private" means access to this is restricted to the class.
public String getMyField()
{
//include validation, logic, logging or whatever you like here
return this.myField;
}
public void setMyField(String value)
{
//include more logic
this.myField = value;
}
在 Java 中 getter 和 setter 是完全普通的函数。 使它们成为 getter 或 setter 的唯一因素是约定。 foo 的 getter 称为 getFoo,setter 称为 setFoo。 在布尔值的情况下,getter 称为 isFoo。 它们还必须有一个特定的声明,如“name”的 getter 和 setter 示例所示:
class Dummy
{
private String name;
public Dummy() {}
public Dummy(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
使用 getter 和 setter 而不是让成员公开的原因是,它可以在不更改接口的情况下更改实现。 此外,许多使用反射来检查对象的工具和工具包只接受具有 getter 和 setter 的对象。 例如, JavaBeans必须有 getter 和 setter 以及其他一些要求。
class Clock {
String time;
void setTime (String t) {
time = t;
}
String getTime() {
return time;
}
}
class ClockTestDrive {
public static void main (String [] args) {
Clock c = new Clock;
c.setTime("12345")
String tod = c.getTime();
System.out.println(time: " + tod);
}
}
当你运行程序时,程序在主电源中启动,
setTime()
被对象 c 调用time
设置为传递的值getTime()
被对象 c 调用tod
并且tod
被打印出来您可能还想阅读“ 为什么 getter 和 setter 方法是邪恶的”:
尽管 getter/setter 方法在 Java 中很常见,但它们并不是特别面向对象 (OO)。 事实上,它们会损害代码的可维护性。 此外,大量 getter 和 setter 方法的存在是一个危险信号,表明从面向对象的角度来看,程序不一定设计得很好。
本文解释了为什么不应该使用 getter 和 setter(以及何时可以使用它们),并提出了一种设计方法,可以帮助您摆脱 getter/setter 的心态。
这是来自 mozilla 的 javascript 示例:
var o = { a:0 } // `o` is now a basic object
Object.defineProperty(o, "b", {
get: function () {
return this.a + 1;
}
});
console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)
我已经使用了很多,因为它们很棒。 当我喜欢我的编码 + 动画时,我会使用它。 例如,制作一个处理Number
的 setter,该数字在您的网页上显示该数字。 当使用 setter 时,它使用tweener将旧数字动画化为新数字。 如果初始数字为 0 并且您将其设置为 10,那么您会看到数字从 0 快速翻转到 10,比方说,半秒。 用户喜欢这些东西,而且创造起来很有趣。
来自 sof 的例子
<?php
class MyClass {
private $firstField;
private $secondField;
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
}
?>
引用:
这里以一个例子来解释在java中使用getter和setter的最简单的方法。 可以以更直接的方式做到这一点,但 getter 和 setter 有一些特殊之处,那就是在继承中的子类中使用父类的私有成员时。 您可以通过使用 getter 和 setter 来实现。
package stackoverflow;
public class StackoverFlow
{
private int x;
public int getX()
{
return x;
}
public int setX(int x)
{
return this.x = x;
}
public void showX()
{
System.out.println("value of x "+x);
}
public static void main(String[] args) {
StackoverFlow sto = new StackoverFlow();
sto.setX(10);
sto.getX();
sto.showX();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.