[英]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.