เนื่องจากgetText()
ไม่คงที่คุณจึงไม่สามารถเรียกใช้จากวิธีคงที่ได้
เพื่อให้เข้าใจว่าทำไมคุณต้องเข้าใจความแตกต่างระหว่างทั้งสอง
วิธีการอินสแตนซ์ (ไม่คงที่) ใช้กับอ็อบเจ็กต์ที่เป็นประเภทเฉพาะ (คลาส) สิ่งเหล่านี้ถูกสร้างขึ้นด้วยสิ่งใหม่เช่นนี้:
SomeClass myObject = new SomeClass();
ในการเรียกวิธีการอินสแตนซ์คุณเรียกมันบนอินสแตนซ์ ( myObject
):
myObject.getText(...)
อย่างไรก็ตามเมธอด / ฟิลด์แบบคงที่สามารถเรียกได้เฉพาะในประเภทโดยตรงพูดเช่นนี้:
คำสั่งก่อนหน้านี้ไม่ถูกต้อง นอกจากนี้ยังสามารถอ้างถึงฟิลด์แบบคงที่ด้วยการอ้างอิงอ็อบเจ็กต์เช่น myObject.staticMethod()
นี้ แต่ไม่ควรใช้เพราะไม่ได้ระบุให้ชัดเจนว่าเป็นตัวแปรคลาส
... = SomeClass.final
และทั้งสองไม่สามารถทำงานร่วมกันได้เนื่องจากทำงานบนพื้นที่ข้อมูลที่แตกต่างกัน (ข้อมูลอินสแตนซ์และข้อมูลคลาส)
ให้ฉันลองอธิบาย พิจารณาคลาสนี้ (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
ตอนนี้ฉันมีกรณีการใช้งานต่อไปนี้:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
มีค่าอะไรบ้าง?
ดี
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
กล่าวอีกนัยหนึ่งTTT
คือข้อมูลที่ใช้ร่วมกันโดยอินสแตนซ์ทั้งหมดของประเภท ดังนั้นจึงไม่สมเหตุสมผลที่จะพูด
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
คำถามคือทำไมTTT ถึงคงที่หรือทำไม getText () ถึงไม่คงที่?
ลบstatic
และควรผ่านข้อผิดพลาดนี้ - แต่หากไม่เข้าใจว่าประเภทของคุณทำอะไรมันเป็นเพียงพลาสเตอร์ติดจนกว่าจะเกิดข้อผิดพลาดถัดไป ข้อกำหนดgetText()
ที่กำหนดให้เป็นแบบไม่คงที่คืออะไร?