Answers:
并不是真的需要教程。阅读封装
private String myField; //"private" means access to this is restricted
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;
}
someObj.getTime().setHour(5)
它,则不应影响someObj
的内部状态。此外,setter和getter (访问者和mutator的别名)也具有非常严格的方法签名,这意味着getter没有任何参数。一般而言,方法只能做一件事。
this
关键字是可选的,除非与具有更特定范围的内容冲突。在您给出的示例中,创建的设置器将只有一个参数,其名称与字段名称匹配,因此this.fieldName = fieldName
,用来区分是将字段分配给自己,而不是将参数分配给自己fieldName = fieldname
。吸气剂中不存在此类冲突。
在Java中,getter和setter是完全普通的函数。使他们成为getter或setter的唯一原因是约定。foo的getter称为getFoo,setter称为setFoo。如果是布尔型,则该吸气剂称为isFoo。它们还必须具有特定的声明,如本示例的“名称”的获取器和设置器所示:
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以及其他一些要求。
error: invalid method declaration; return type required
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方法是一个危险信号,即从OO角度来看,该程序不一定设计得很好。
本文介绍了为什么不应该使用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
以便在您的网页上显示该数字。当使用二传手它动画的老号码使用新号码中间人。如果初始数字为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();
}
}