คำถามติดแท็ก programming-practices

Programming Practices เป็นวิธีที่ใช้กันทั่วไปหรือไม่ใช้กันทั่วไปในการพัฒนาซอฟต์แวร์ สิ่งเหล่านี้อาจรวมถึงสิ่งต่าง ๆ เช่นการพัฒนาแบบ Agile, Kanban, ทางลัดการเข้ารหัส ฯลฯ

9
ผ้าพันแผลใช้งานได้บ่อยแค่ไหน [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ลองนึกภาพสถานการณ์ต่อไปนี้: คุณตรวจพบว่าโปรแกรมของคุณ (หรือของคนอื่น) มีข้อบกพร่อง - ฟังก์ชั่นจะสร้างผลลัพธ์ที่ผิดเมื่อได้รับข้อมูลเฉพาะ คุณตรวจสอบรหัสและไม่พบสิ่งผิดปกติมันดูเหมือนจะชะงักเมื่อได้รับข้อมูลนี้ ตอนนี้คุณสามารถทำหนึ่งในสองสิ่งนี้: คุณตรวจสอบรหัสต่อไปจนกว่าคุณจะพบสาเหตุที่แท้จริง หรือคุณตบผ้าพันแผลด้วยการเพิ่มifคำสั่งตรวจสอบว่าอินพุตเป็นอินพุตเฉพาะนี้หรือไม่ถ้าเป็นให้ส่งคืนค่าที่คาดหวัง สำหรับฉันแล้วการใช้ผ้าพันแผลนั้นจะไม่เป็นที่ยอมรับอย่างสมบูรณ์ หากโค้ดทำงานโดยไม่คาดหมายกับอินพุตนี้อินพุตอื่นที่คุณพลาดไปมันจะตอบสนองอย่างประหลาด? มันดูเหมือนจะไม่เหมือนการแก้ไขเลย - คุณเพียงแค่พรวนดินปัญหาใต้พรม ในขณะที่ฉันจะไม่พิจารณาทำสิ่งนี้ฉันรู้สึกประหลาดใจที่อาจารย์และหนังสือมักจะเตือนเราเกี่ยวกับการใช้การแก้ไข "ผ้าพันแผล" ไม่ใช่ความคิดที่ดี ดังนั้นสิ่งนี้ทำให้ฉันประหลาดใจ: "การแก้ไข" ประเภทนี้พบได้บ่อยแค่ไหน?

12
รหัสแฟนซีสั้นที่แสดงความคิดเห็นกับรหัสที่เข้าใจง่ายอีกต่อไปที่ไม่ใส่โค้ดซึ่งเป็นที่ต้องการ?
บางครั้งอัลกอริทึมสามารถเขียนได้สองวิธี: วิธีที่สั้นและแฟนซี หรือ วิธีที่ยาวและง่ายต่อการเข้าใจ ยกตัวอย่างเช่นที่นี่เป็นอีกต่อไปวิธีที่ง่ายของการคัดลอกสตริงsourceไปdestใน C: *dest = *source; while (*source != '\0') { source++; dest++; *dest = *source; } (true); และนี่เป็นวิธีที่สั้นและแฟนซี // Copy string source to dest while (*dest++ = *source++); ฉันเคยได้ยินและอ่านเสมอว่าควรหลีกเลี่ยงรหัสแฟนซีและฉันมักจะเห็นด้วย แต่ถ้าเราคำนึงถึงความคิดเห็นล่ะสมมติว่าในตัวอย่างข้างต้นเรามีโค้ดที่ไม่มีโค้ดที่เข้าใจง่ายยาวกว่าและเข้าใจง่ายกว่าและมีโค้ดที่สั้นและเข้าใจง่าย รหัสที่ไม่ใช่แฟนซียังคงเป็นที่ต้องการหรือไม่ แก้ไข:หลายคนมีความคิดเห็นเกี่ยวกับชื่อตัวแปรดังนั้นฉันได้แก้ไขโค้ดตัวอย่างเพื่อไม่ให้เป็นปัจจัยเมื่อเลือกมากกว่าอีก ฉันพยายามลบการบ้านสองครั้งในตัวอย่างแรก แต่นั่นทำให้รหัสไม่สามารถอ่านได้ บางทีนี่อาจไม่ใช่ตัวอย่างที่ดีที่สุดเพราะหลายคนพบว่าโค้ด 'แฟนซี' สามารถอ่านและเข้าใจได้ง่ายกว่าโค้ดที่ยาวกว่า แนวคิดก็คือมีรหัสที่ยาวขึ้นหนึ่งรหัสซึ่งง่ายต่อการเข้าใจมากกว่ารหัสสั้น ๆ แต่ซับซ้อน EDIT2:นี่เป็นตัวอย่างใหม่ที่ฉันได้จากSO : ความคิดเห็นเวอร์ชั่นแฟนซี: //direct formula for …

7
ควรใช้ "อย่างอื่น" ในสถานการณ์ที่การควบคุมการไหลทำให้ซ้ำซ้อนหรือไม่?
บางครั้งฉันสะดุดกับรหัสที่คล้ายกับตัวอย่างต่อไปนี้ (สิ่งที่ฟังก์ชั่นนี้ทำไม่ตรงกับขอบเขตของคำถามนี้): function doSomething(value) { if (check1(value)) { return -1; } else if (check2(value)) { return value; } else { return false; } } ในขณะที่คุณสามารถดูif, else ifและelseงบที่ใช้ร่วมกับreturnคำสั่ง ดูเหมือนว่าจะใช้งานง่ายสำหรับผู้สังเกตการณ์ทั่วไป แต่ฉันคิดว่ามันจะดูสง่างามกว่า (จากมุมมองของนักพัฒนาซอฟต์แวร์) เพื่อวางelse-s และทำให้รหัสง่ายขึ้นดังนี้: function doSomething(value) { if (check1(value)) { return -1; } if (check2(value)) { return value; } return false; } …

5
“ ลืมรหัสผ่าน” - จะจัดการได้อย่างไร
ฉันอ่านคำตอบนี้และพบว่ามีความคิดเห็นยืนยันที่จะไม่ส่งรหัสผ่านทางอีเมล: รหัสผ่านไม่สามารถเรียกคืนได้ทางอีเมลฉันเกลียดที่ หมายความว่ารหัสผ่านของฉันถูกเก็บไว้ในรูปแบบข้อความธรรมดา ควรรีเซ็ตเท่านั้น นี่ทำให้ฉันมีคำถามเรื่องการจัดการตัวเลือกลืมรหัสผ่าน? รหัสผ่านแบบดิบจะต้องแสดงใน UI ใด ๆ เพื่อให้ผู้ใช้สามารถอ่านได้ ดังนั้นสิ่งที่จะเป็นวิธีในการจัดการ "ลืมรหัสผ่าน"

6
REST endpoint เพื่อแสดงตัวอย่างก่อน POSTing
ฉันออกแบบเว็บแอปพลิเคชั่นใหม่ซึ่งขับเคลื่อนโดยแบ็กเอนด์ REST และส่วนหน้า HTML + JS มีวิธีการPOSTหนึ่งวิธีในการเปลี่ยนเอนทิตีหนึ่ง (ลองเรียกใช้การกำหนดค่า) ซึ่งมีผลข้างเคียงหลายอย่างในสถานะขององค์ประกอบหลายอย่างของแอปพลิเคชัน สมมติว่ามีการดำเนินการPOSTด้วยวิธีนี้: POST /api/config BODY {config: ....} ด้วยเหตุนี้ฉันจึงต้องการแสดงตัวอย่างก่อนที่จะทำการเปลี่ยนแปลงเหล่านั้นเพื่อให้ผู้ใช้สามารถสังเกตเห็นสิ่งที่กำลังจะเปลี่ยนแปลง สิ่งแรกที่ฉันคิดเกี่ยวกับการทำให้จุดสิ้นสุดGETสำหรับการแสดงตัวอย่างส่งเนื้อความของสถานะใหม่ของเอนทิตี ทางนี้: GET /api/preview/items BODY {config: ....} อาจแสดงสถานะใหม่สำหรับรายการที่มีการกำหนดค่าใหม่ GET /api/preview/sales BODY {config: ....} อาจแสดงสถานะใหม่สำหรับการขายด้วยการกำหนดค่าใหม่ ดูเหมือนว่าเป็นความคิดที่ดีที่จะใช้คำกริยาGETเพราะฉันไม่ได้เปลี่ยนสถานะของแอปพลิเคชัน อย่างไรก็ตามการใช้ของร่างกายร้องขอกับGETคำขอดูเหมือนว่าจะท้อแท้ มีวิธีปฏิบัติที่ดีเกี่ยวกับเรื่องนี้หรือไม่? ตัวเลือกอื่นอาจจะเก็บการกำหนดค่าเป็นแบบร่างด้วยวิธีการหนึ่งและแสดงผลลัพธ์กับผู้อื่น แต่จะต้องมีขั้นตอนเพิ่มเติมและต้องจัดการแบบร่างในเซิร์ฟเวอร์: POST /api/preview/config BODY {config: ....} GET /api/preview/items?idPreviewConfig=1

3
วิธีทดสอบ data access layer
ฉันมีวิธี DAO ที่ใช้ Spring สำหรับการเข้าถึง JDBC มันคำนวณอัตราความสำเร็จของผู้ขายในการขายสินค้า นี่คือรหัส: public BigDecimal getSellingSuccessRate(long seller_id) { String sql = "SELECT SUM(IF(sold_price IS NOT NULL, 1, 0))/SUM(1) FROM transaction WHERE seller_id = ?"; Object[] args = {seller_id}; return getJdbcTemplate().queryForObject(sql, args, BigDecimal.class); } ฉันควรจะทดสอบวิธีนี้หรือวิธี DAO กับ JUnit อย่างไร แนวทางปฏิบัติที่ดีที่สุดในการทดสอบตรรกะการเข้าถึงข้อมูลคืออะไร ฉันคิดว่าจะทดสอบกับฐานข้อมูลแบบฝังที่โหลดด้วยข้อมูลบางส่วน แต่เราไม่ควรทำการทดสอบการรวมที่คล้ายกับสภาพแวดล้อมการผลิตในแง่ของ RDBMS และสคีมาหรือไม่

5
การตั้งชื่อเชิงพรรณนาเทียบกับ 80 บรรทัดอักขระ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบ เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันมักจะได้ยินวิธีการเขียนโปรแกรมที่มีค่าทั้งสองนี้: (1) บรรทัดของรหัสควรเป็น 80 ตัวอักษรหรือน้อยกว่าและ (2) ใช้ชื่อที่สื่อความหมายสำหรับตัวแปรวิธีการชั้นเรียน ฯลฯ ฉันเข้าใจเหตุผลของคำแนะนำทั้งสองนี้ พวกเขาดูเหมือนจะแลกเปลี่ยนกันบ่อยครั้ง หากฉันเก็บรหัสของฉันไว้ต่ำกว่า 80 ตัวอักษร / บรรทัดฉันจะใช้ชื่อที่มีความหมายน้อยกว่า (โดยเฉพาะใน Python ที่แต่ละการเยื้องนับเป็น 4 ตัวอักษร) แต่ถ้าฉันใช้ชื่อที่มีความหมายมากขึ้น ดังนั้นคำถามของฉันคือคำแนะนำสองชิ้นนี้สำคัญกว่าที่จะต้องปฏิบัติตามหากต้องเลือกตัวเลือก ฉันสงสัยว่านี่เป็นโปรแกรมเมอร์อิสระ (มือสมัครเล่น) แต่ที่สำคัญกว่านั้นจากมุมมองของวิศวกรซอฟต์แวร์ที่ทำงานให้กับ บริษัท ขนาดใหญ่

2
จะเริ่มโปรแกรมการแข่งขันได้อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบ เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันฝึกการเขียนโค้ดมาระยะหนึ่งแล้ว แต่ปัญหาคือฉันต้องใช้เวลามากในการเขียนวิธีแก้ปัญหา ฉันต้องการถามว่าการเขียนโปรแกรมการแข่งขันสามารถช่วยฉันในการปรับปรุงนี้ ถ้าใช่แล้วฉันจะเริ่มต้นได้อย่างไรและจะใช้เว็บไซต์ใด (เช่นTopCoder ) เห็นได้ชัดว่าฉันไม่สามารถแก้ปัญหาที่ยากได้ในตอนนี้ ฉันควรทำอย่างไรดี? ถ้าไม่ฉันควรทำยังไงดี? ฉันยังมีปัญหาอื่นที่ฉันต้องการเรียนรู้การเขียนโค้ด แต่สิ่งที่ฉันรู้สึกว่าฉันไม่ค่อยดี ฉันควรทำอย่างไรดี? มันเหมือนกับการดักฟังฉันจากภายใน ฉันรู้ว่าบางคนอาจไม่พบคำถามนี้ให้ข้อมูล แต่อย่างน้อยโปรดให้ฉันได้รับคำตอบ

4
แรงจูงใจและการใช้ตัวสร้างการย้ายใน C ++
เมื่อเร็ว ๆ นี้ฉันได้อ่านเกี่ยวกับตัวสร้างการย้ายใน C ++ (ดูตัวอย่างที่นี่ ) และฉันพยายามที่จะเข้าใจวิธีการทำงานและเวลาที่ฉันควรใช้พวกเขา เท่าที่ฉันเข้าใจตัวสร้างการย้ายถูกใช้เพื่อบรรเทาปัญหาประสิทธิภาพที่เกิดจากการคัดลอกวัตถุขนาดใหญ่ หน้าวิกิพีเดียกล่าวว่า: "ปัญหาประสิทธิภาพการทำงานเรื้อรังกับ C ++ 03 คือสำเนาที่มีราคาแพงและไม่จำเป็นซึ่งสามารถเกิดขึ้นได้โดยปริยายเมื่อวัตถุถูกส่งผ่านตามค่า" ปกติฉันจะจัดการกับสถานการณ์เช่นนี้ โดยการส่งวัตถุโดยการอ้างอิงหรือ โดยการใช้ตัวชี้อัจฉริยะ (เช่น boost :: shared_ptr) เพื่อส่งผ่านวัตถุ (ตัวชี้อัจฉริยะจะถูกคัดลอกแทนวัตถุ) สถานการณ์ใดบ้างที่ทั้งสองเทคนิคข้างต้นไม่เพียงพอและการใช้ตัวสร้างการย้ายมีความสะดวกมากขึ้น?

4
เขียนคู่มือของนักพัฒนาทั้ง บริษัท
ฉันทำงานให้กับ บริษัท ขนาดเล็ก แขนการพัฒนาซอฟต์แวร์ของ บริษัท ก่อนที่ฉันจะได้รับการว่าจ้างประกอบด้วยผู้ชายที่ทำงานหนักเกินไปที่สอนด้วยตนเองหนึ่งคน ตอนนี้ฉันเขียนซอฟต์แวร์ให้กับ บริษัท มาสองสามปีแล้วฉันได้รับมอบหมายให้สร้างแนวทางการพัฒนาซอฟต์แวร์ทั่วทั้ง บริษัท อย่างเป็นทางการ ขณะนี้เราไม่มีแนวทางอื่นนอกเหนือจาก เขียนโค้ดทดสอบใส่ในไฟล์. zip และส่งไปยังลูกค้า คะแนนโบนัสสำหรับ TDD และการควบคุมเวอร์ชัน เจ้านายของฉันต้องการให้ฉันเขียนคู่มือผู้พัฒนาซอฟต์แวร์ซึ่งกำหนดกระบวนการทั่วไปโปรโตคอลเครื่องมือและแนวทางที่เราใช้ในการทำให้เสร็จ กล่าวอีกนัยหนึ่งเขาต้องการหนังสือ "นี่คือสิ่งที่เราทำที่นี่" เพื่อให้พนักงานใหม่คุ้นเคยกับวิธีการทำสิ่งต่าง ๆ ได้ง่ายขึ้นรวมทั้งช่วยให้เจ้านายของฉันเข้าใจสิ่งที่ลูกน้องของเขากำลังทำอยู่และวิธีการที่พวกเขาทำ มัน. วิธีที่ฉันเห็นฉันกำลังวางรากฐานและจำเป็นต้องทำถูกต้อง คุณจะเลือกหัวข้ออย่างไรสำหรับหนังสือคู่มือเล่มนี้? คุณสามารถให้ตัวอย่างหัวข้อได้บ้างไหม? หมายเหตุด้านข้าง: หากเป็นเรื่องสำคัญเราจะเป็นร้านค้า Microsoft .NET เป็นหลัก และเรากำลังดูวิธีปฏิบัติที่คล่องตัวเช่น XP และ Scrum แต่เราอาจต้องปรับเปลี่ยนอย่างมากเพื่อให้ทำงานใน บริษัท ของเรา

4
บริษัท ของคุณมีนโยบายเกี่ยวกับการเขียนบล็อกส่วนบุคคล (ทางเทคนิค) หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว บริษัท ของคุณมีนโยบายเกี่ยวกับการเขียนบล็อกส่วนบุคคล (ทางเทคนิค) หรือไม่? สนใจที่จะแบ่งปัน? เราสนับสนุนให้นักพัฒนาซอฟต์แวร์ของเราเก็บบล็อกส่วนตัวและพูดคุยเกี่ยวกับปัญหาทางเทคนิคที่พบในที่ทำงานซึ่งไม่ใช่ความสามารถหลักหรือ IP หลัก เราได้ทำมันในรูปแบบ "อย่าถามอย่าบอก" แต่ถึงเวลาเขียนอะไรลงไป ปรับปรุง : ขอขอบคุณทุกท่านสำหรับคำตอบของคุณเราได้ดำเนินนโยบายสำหรับสัปดาห์ที่ผ่านมานี้ - ข้อความเต็มรูปแบบที่นี่

10
โดยปกติคุณจะจัดวางพื้นที่ของคลาสอย่างไร
ฉันสงสัยว่ามีมาตรฐานในการกำหนดพื้นที่ของชั้นเรียนหรือไม่ ฉันใช้อยู่ Fields Constructor Properties Public Methods Private Methods Fieldsเป็นทรัพย์สินส่วนตัวและPropertiesเป็นทรัพย์สินสาธารณะ ปกติแล้วฉันจะใช้ subregions ภายในถ้าจำเป็นหรือจะเพิ่มภูมิภาคอื่น ๆ ด้านล่าง (เช่นสมาชิกอินเทอร์เฟซหรือ baseClass) เป็นครั้งคราว

6
มาโครคืออะไร ความแตกต่างระหว่างแมโครและฟังก์ชั่น?
ฉันไม่เข้าใจแนวคิดมาโครอย่างดี มาโครคืออะไร ฉันไม่เข้าใจว่ามันแตกต่างจากฟังก์ชั่นอย่างไร ทั้งฟังก์ชั่นและมาโครมีบล็อกของรหัส ดังนั้นมาโครและฟังก์ชั่นต่างกันอย่างไร

10
ทำไมเราต้องการ“ ฟังก์ชั่นโทรกลับ”?
programming in Luaฉันกำลังอ่านหนังสือ มันบอกว่า การปิดให้บริการเป็นเครื่องมือที่มีคุณค่าในหลายบริบท ดังที่เราได้เห็นพวกมันมีประโยชน์ในการโต้แย้งกับฟังก์ชันลำดับสูงเช่นเรียงลำดับ การปิดเป็นสิ่งที่มีค่าสำหรับฟังก์ชั่นที่สร้างฟังก์ชั่นอื่น ๆ เช่นตัวอย่างตัวนับใหม่ กลไกนี้อนุญาตให้โปรแกรม Lua รวมเทคนิคการเขียนโปรแกรมที่ซับซ้อนจากโลกที่ใช้งานได้ การปิดเป็นประโยชน์สำหรับฟังก์ชั่นการโทรกลับเช่นกัน ตัวอย่างทั่วไปที่นี่เกิดขึ้นเมื่อคุณสร้างปุ่มในชุดเครื่องมือ GUI ทั่วไป แต่ละปุ่มมีฟังก์ชั่นการโทรกลับที่จะถูกเรียกเมื่อผู้ใช้กดปุ่ม; คุณต้องการให้ปุ่มต่าง ๆ ทำสิ่งต่าง ๆ เล็กน้อยเมื่อกด ตัวอย่างเช่นเครื่องคิดเลขดิจิตอลต้องการปุ่มที่คล้ายกันสิบปุ่มสำหรับแต่ละหลัก คุณสามารถสร้างแต่ละคนด้วยฟังก์ชั่นเช่นนี้: function digitButton (digit) return Button{label = tostring(digit), action = function () add_to_display(digit) end} end มันดูเหมือนว่าถ้าผมเรียกdigitButtonมันจะกลับaction(นี้จะสร้างปิด) ดังนั้นฉันสามารถเข้าถึงผ่านไปdigitdigitButton คำถามของฉันคือ: Why we need call back functions? what situations can …

6
มันเป็นนิสัยที่ไม่ดีที่จะใช้การสะท้อน (มากกว่า) หรือไม่?
เป็นวิธีปฏิบัติที่ดีหรือไม่หากใช้การสะท้อนกลับหากลดจำนวนรหัสสำเร็จรูปลงอย่างมาก? โดยทั่วไปจะมีการแลกเปลี่ยนระหว่างประสิทธิภาพและความสามารถในการอ่านในด้านหนึ่งและสิ่งที่เป็นนามธรรม / ระบบอัตโนมัติ / การลดรหัสสำเร็จรูปในอีกด้านหนึ่ง แก้ไข: นี่คือตัวอย่างของการใช้การสะท้อนที่แนะนำ เพื่อให้ตัวอย่างเช่นสมมติว่ามีระดับนามธรรมBaseซึ่งมี 10 สาขาและมี 3 subclasses SubclassA, SubclassBและSubclassCแต่ละคนมี 10 สาขาที่แตกต่างกัน พวกเขาทั้งหมดถั่วง่าย ๆ ปัญหาคือคุณได้รับBaseการอ้างอิงสองประเภทและคุณต้องการดูว่าวัตถุที่เกี่ยวข้องนั้นเป็นประเภทเดียวกัน (ย่อย) และเท่ากันหรือไม่ เนื่องจากโซลูชันมีโซลูชันแบบดิบที่คุณตรวจสอบก่อนว่าประเภทเท่ากันหรือไม่จากนั้นตรวจสอบฟิลด์ทั้งหมดหรือคุณสามารถใช้การสะท้อนและดูแบบไดนามิกว่าเป็นประเภทเดียวกันและวนซ้ำทุกวิธีที่ขึ้นต้นด้วย "รับ" (ระเบียบ การกำหนดค่ามากกว่า) เรียกพวกเขาทั้งสองวัตถุและโทรเท่ากับผล boolean compare(Base base1, Base, base2) { if (base1 instanceof SubclassA && base2 instanceof SubclassA) { SubclassA subclassA1 = (SubclassA) base1; SubclassA subclassA2 = …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.