ฉันมาจากโลก php คุณช่วยอธิบายได้ไหมว่า getters และ setters คืออะไรและสามารถให้ตัวอย่างได้หรือไม่?
ฉันมาจากโลก php คุณช่วยอธิบายได้ไหมว่า getters และ setters คืออะไรและสามารถให้ตัวอย่างได้หรือไม่?
คำตอบ:
ไม่จำเป็นต้องมีบทช่วยสอนสำหรับเรื่องนี้ อ่านข้อมูลเกี่ยวกับการห่อหุ้ม
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
สถานะภายในของ นอกจากนี้ setters และ getters (accessors และ mutators ตามชื่อนักแสดง)มีลายเซ็นวิธีการที่เข้มงวดมากซึ่งหมายความว่า getter ไม่มีพารามิเตอร์ใด ๆ วิธีการโดยทั่วไปควรทำเพียงสิ่งเดียวเท่านั้น
this
คีย์เวิร์ดเป็นทางเลือกเว้นแต่จะมีข้อขัดแย้งกับบางสิ่งที่มีขอบเขตเฉพาะเจาะจงมากขึ้น ในตัวอย่างที่คุณให้ setter ที่สร้างขึ้นจะมีพารามิเตอร์เดียวที่มีชื่อตรงกับชื่อฟิลด์ดังนั้นจึงthis.fieldName = fieldName
ถูกใช้เพื่อแยกแยะว่าฟิลด์ถูกกำหนดให้แทนที่จะเป็นพารามิเตอร์ที่กำหนดให้กับตัวเองตามที่fieldName = fieldname
จะบรรลุ ไม่มีความขัดแย้งดังกล่าวเกิดขึ้นใน getter
ใน Java getters และ setters เป็นฟังก์ชันธรรมดาโดยสิ้นเชิง สิ่งเดียวที่ทำให้พวกเขาได้รับหรือ setters คือการประชุม getter for foo เรียกว่า getFoo และ setter เรียกว่า setFoo ในกรณีของบูลีน getter เรียกว่า isFoo นอกจากนี้ยังต้องมีการประกาศเฉพาะดังที่แสดงในตัวอย่างของ getter และ setter สำหรับ 'name':
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;
}
}
เหตุผลในการใช้ getters และ setters แทนที่จะทำให้สมาชิกของคุณเป็นแบบสาธารณะก็คือทำให้สามารถเปลี่ยนการใช้งานได้โดยไม่ต้องเปลี่ยนอินเทอร์เฟซ นอกจากนี้เครื่องมือและชุดเครื่องมือจำนวนมากที่ใช้การสะท้อนเพื่อตรวจสอบวัตถุยอมรับเฉพาะวัตถุที่มีตัวรับและตัวตั้งค่าเท่านั้น ตัวอย่างเช่นJavaBeansต้องมี getters และ setters รวมถึงข้อกำหนดอื่น ๆ
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()
ถูกเรียกโดยอ็อบเจ็กต์ ctime
ถูกตั้งค่าเป็นค่าที่ส่งผ่านgetTime()
ถูกเรียกโดยอ็อบเจ็กต์ ctod
และtod
พิมพ์ออกมาคุณอาจต้องการอ่าน " ทำไมวิธี getter และ setter จึงชั่วร้าย ":
แม้ว่าเมธอด getter / setter จะเป็นสิ่งที่พบเห็นได้ทั่วไปใน Java แต่ก็ไม่ได้เป็นแบบเชิงวัตถุ (OO) โดยเฉพาะ ในความเป็นจริงมันสามารถทำลายความสามารถในการบำรุงรักษาของโค้ดของคุณ ยิ่งไปกว่านั้นการปรากฏตัวของวิธี getter และ setter จำนวนมากเป็นธงสีแดงที่โปรแกรมไม่จำเป็นต้องได้รับการออกแบบมาอย่างดีจากมุมมองของ OO
บทความนี้อธิบายว่าเหตุใดคุณจึงไม่ควรใช้ getter และ setter (และเมื่อใดที่คุณสามารถใช้ได้) และแนะนำวิธีการออกแบบที่จะช่วยให้คุณหลุดพ้นจากความคิดของ getter / setter
นี่คือตัวอย่างจาวาสคริปต์จาก mozilla:
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 อย่างรวดเร็วสมมติว่าครึ่งวินาที ผู้ใช้ชื่นชอบสิ่งนี้และสนุกที่จะสร้าง
ตัวอย่างจาก soft
<?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;
}
}
?>
การอ้างอิง:
นี่คือตัวอย่างเพื่ออธิบายวิธีที่ง่ายที่สุดในการใช้ getter และ setter ใน java เราสามารถทำได้อย่างตรงไปตรงมามากขึ้น แต่ getter และ setter มีบางอย่างที่พิเศษคือเมื่อใช้ private member ของ parent class ในคลาสย่อยในการสืบทอด คุณสามารถทำให้เป็นไปได้โดยใช้ 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();
}
}