คำถามติดแท็ก interface

อินเทอร์เฟซหมายถึงจุดที่กำหนดของการโต้ตอบกับส่วนประกอบ ส่วนต่อประสานสามารถใช้งานได้ทั้งระดับฮาร์ดแวร์และซอฟต์แวร์ --- นอกจากนี้ยังอ้างถึงองค์ประกอบภาษา `interface 'ซึ่งเป็นข้อยกเว้นเพียงอย่างเดียวของการสืบทอดเดี่ยวใน Java, C # และภาษาที่คล้ายกัน

4
ทำไมพารามิเตอร์ทางเลือก C # 4 ที่กำหนดไว้ในส่วนต่อประสานไม่ได้ถูกบังคับใช้ในการใช้งานคลาส?
ฉันสังเกตเห็นว่าด้วยพารามิเตอร์ที่เป็นตัวเลือกใน C # 4 หากคุณระบุพารามิเตอร์ที่เป็นตัวเลือกบนอินเทอร์เฟซที่คุณไม่ต้องทำให้พารามิเตอร์นั้นเป็นตัวเลือกในชั้นเรียนการใช้งานใด ๆ : public interface MyInterface { void TestMethod(bool flag = false); } public class MyClass : MyInterface { public void TestMethod(bool flag) { Console.WriteLine(flag); } } และดังนั้นจึง: var obj = new MyClass(); obj.TestMethod(); // compiler error var obj2 = new MyClass() as MyInterface; obj2.TestMethod(); // …


13
ลักษณะเทียบกับส่วนต่อประสาน
ฉันพยายามศึกษาเกี่ยวกับ PHP เมื่อเร็ว ๆ นี้และฉันพบว่าตัวเองติดนิสัยแล้ว ฉันเข้าใจแนวคิดของการนำโค้ดแนวนอนมาใช้ใหม่และไม่ต้องการรับมรดกจากคลาสนามธรรม สิ่งที่ฉันไม่เข้าใจคือ: อะไรคือความแตกต่างที่สำคัญระหว่างการใช้คุณลักษณะกับส่วนต่อประสาน ฉันได้ลองค้นหาโพสต์บล็อกที่ดีหรือบทความที่อธิบายว่าควรใช้อย่างใดอย่างหนึ่ง แต่ตัวอย่างที่ฉันพบจนถึงตอนนี้ดูเหมือนจะคล้ายกันมาก
345 php  interface  traits 


11
การตั้งชื่อส่วนต่อประสานใน Java [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ภาษา OO ส่วนใหญ่นำหน้าชื่ออินเตอร์เฟสด้วยตัวพิมพ์ใหญ่ I ทำไม Java ไม่ทำเช่นนี้? อะไรคือเหตุผลที่ไม่ปฏิบัติตามอนุสัญญานี้ เพื่อแสดงให้เห็นถึงสิ่งที่ฉันหมายถึงถ้าฉันต้องการที่จะมีส่วนติดต่อผู้ใช้และการใช้งานของผู้ใช้ฉันมีสองตัวเลือกใน Java: Class = ผู้ใช้ส่วนต่อประสาน = UserInterface Class = UserImpl, Interface = ผู้ใช้ ที่ไหนในภาษาส่วนใหญ่: Class = ผู้ใช้ส่วนต่อประสาน = IUser ตอนนี้คุณอาจยืนยันว่าคุณสามารถเลือกชื่อที่สื่อความหมายได้มากที่สุดสำหรับการใช้งานของผู้ใช้และปัญหาจะหายไป แต่ Java ของการผลักดันวิธี POJO กับสิ่งต่าง ๆ และคอนเทนเนอร์ IOC ส่วนใหญ่ใช้ DynamicProxies อย่างกว้างขวาง สองสิ่งเหล่านี้เข้าด้วยกันหมายความว่าคุณจะมีอินเทอร์เฟซมากมายกับการใช้งาน POJO เดียว …

5
อะไรคือความแตกต่างระหว่างอินเตอร์เฟสและ @interface ใน java?
ฉันยังไม่ได้สัมผัส Java ตั้งแต่ใช้ JBuilder ในช่วงปลายยุค 90 ในขณะที่อยู่ที่มหาวิทยาลัยดังนั้นฉันจึงรู้สึกไม่ค่อยดีไม่ว่าจะด้วยวิธีใดก็ตามฉันได้ทำงานกับโปรเจ็กต์ขนาดเล็กในสัปดาห์นี้และใช้ Intellij IDEA เป็น IDE ของฉัน สำหรับการเปลี่ยนแปลงของการก้าวจากการพัฒนา. net ปกติของฉัน ฉันสังเกตเห็นว่ามันรองรับการเพิ่มอินเตอร์เฟสและ @interfaces @interface คืออะไรและมันแตกต่างจากอินเตอร์เฟสปกติอย่างไร public interface Test { } เมื่อเทียบกับ public @interface Test { } ฉันได้ทำการค้นหาเล็กน้อย แต่ไม่พบข้อมูลที่เป็นประโยชน์มากมายที่อ้างถึง @interface

13
การตรวจสอบประเภทอินเตอร์เฟสด้วย Typescript
คำถามนี้เป็นแบบแอนะล็อกโดยตรงกับการตรวจสอบประเภท Class ด้วย TypeScript ฉันจำเป็นต้องค้นหารันไทม์หากตัวแปรชนิดใดที่ใช้อินเทอร์เฟซ นี่คือรหัสของฉัน: interface A{ member:string; } var a:any={member:"foobar"}; if(a instanceof A) alert(a.member); หากคุณป้อนรหัสนี้ในสนามเด็กเล่น typescript บรรทัดสุดท้ายจะถูกทำเครื่องหมายว่าเป็นข้อผิดพลาด "ชื่อ A ไม่มีอยู่ในขอบเขตปัจจุบัน" แต่นั่นไม่เป็นความจริงชื่อนี้มีอยู่ในขอบเขตปัจจุบัน ฉันสามารถเปลี่ยนการประกาศตัวแปรเป็นvar a:A={member:"foobar"};โดยไม่มีการร้องเรียนจากบรรณาธิการ หลังจากท่องเว็บและค้นหาคำถามอื่น ๆ บนดังนั้นฉันเปลี่ยนอินเทอร์เฟซเป็นคลาส แต่จากนั้นฉันไม่สามารถใช้ตัวอักษรวัตถุเพื่อสร้างอินสแตนซ์ ฉันสงสัยว่าประเภท A จะหายไปเช่นนั้นได้อย่างไรเมื่อดูที่จาวาสคริปต์ที่สร้างขึ้นจะอธิบายถึงปัญหา: var a = { member: "foobar" }; if(a instanceof A) { alert(a.member); } ไม่มีการแทนค่า A ในฐานะอินเตอร์เฟสดังนั้นจึงไม่สามารถตรวจสอบชนิดรันไทม์ได้ ฉันเข้าใจว่าจาวาสคริปต์เป็นภาษาแบบไดนามิกไม่มีแนวคิดของส่วนต่อประสาน มีวิธีใดบ้างที่จะพิมพ์การตรวจสอบอินเทอร์เฟซ? …

12
ควรประกาศวิธีการในอินเทอร์เฟซ Java ที่มีหรือไม่มีตัวแก้ไขการเข้าถึงสาธารณะหรือไม่?
ควรประกาศวิธีการในอินเทอร์เฟซ Java ด้วยpublicตัวดัดแปลงการเข้าถึงหรือไม่? แน่นอนว่าในทางเทคนิคแล้วมันไม่สำคัญ วิธีการเรียนที่ใช้อยู่เสมอinterface publicแต่การประชุมที่ดีกว่าคืออะไร? Java เองนั้นไม่สอดคล้องกันในเรื่องนี้ ดูตัวอย่างCollectionเทียบComparableหรือเทียบกับFutureScriptEngine

16
วิธีการส่งผ่าน Java เป็นพารามิเตอร์
ฉันกำลังมองหาวิธีที่จะผ่านวิธีการโดยอ้างอิง ฉันเข้าใจว่า Java ไม่ผ่านวิธีการเป็นพารามิเตอร์อย่างไรก็ตามฉันต้องการได้รับทางเลือก ฉันได้รับแจ้งว่าอินเทอร์เฟซเป็นทางเลือกในการส่งผ่านเมธอดเป็นพารามิเตอร์ แต่ฉันไม่เข้าใจว่าอินเตอร์เฟสสามารถทำหน้าที่เป็นวิธีโดยอ้างอิงได้อย่างไร หากฉันเข้าใจอย่างถูกต้องอินเทอร์เฟซเป็นชุดวิธีนามธรรมที่ไม่ได้กำหนดไว้ ฉันไม่ต้องการส่งอินเทอร์เฟซที่จำเป็นต้องกำหนดทุกครั้งเนื่องจากวิธีการต่าง ๆ สามารถเรียกวิธีเดียวกันด้วยพารามิเตอร์เดียวกัน สิ่งที่ฉันต้องการทำให้สำเร็จคือสิ่งที่คล้ายกับสิ่งนี้: public void setAllComponents(Component[] myComponentArray, Method myMethod) { for (Component leaf : myComponentArray) { if (leaf instanceof Container) { //recursive call if Container Container node = (Container) leaf; setAllComponents(node.getComponents(), myMethod); } //end if node myMethod(leaf); } //end looping through components …
277 java  interface 



30
การเชื่อมต่อ - ประเด็นคืออะไร?
เหตุผลของการเชื่อมต่ออย่างแท้จริงทำให้ฉันหลง จากสิ่งที่ฉันเข้าใจมันเป็นวิธีแก้ไขสำหรับมรดกที่ไม่มีอยู่จริงซึ่งไม่มีอยู่ใน C # (หรืออย่างนั้นฉันก็บอก) สิ่งที่ฉันเห็นคือคุณกำหนดสมาชิกและฟังก์ชั่นบางอย่างไว้ล่วงหน้าซึ่งจะต้องกำหนดอีกครั้งในชั้นเรียนอีกครั้ง จึงทำให้ส่วนต่อประสานซ้ำซ้อน มันรู้สึกเหมือนวากยสัมพันธ์…เอาล่ะขยะให้ฉัน (โปรดไม่มีความผิดใด ๆ หมายถึงทำสิ่งที่ไร้ประโยชน์) ในตัวอย่างที่ระบุด้านล่างนำมาจากเธรดอินเทอร์เฟซ C # ที่แตกต่างกันบนสแตกล้นฉันจะสร้างคลาสพื้นฐานที่เรียกว่าพิซซ่าแทนอินเทอร์เฟซ ตัวอย่างง่าย ๆ (นำมาจากการสนับสนุนสแตกล้นที่แตกต่างกัน) public interface IPizza { public void Order(); } public class PepperoniPizza : IPizza { public void Order() { //Order Pepperoni pizza } } public class HawaiiPizza : IPizza { public void Order() …
269 c#  .net  interface 

4
การเรียกเมธอดดีฟอลต์อย่างชัดเจนใน Java
Java 8 แนะนำวิธีการเริ่มต้นเพื่อให้ความสามารถในการขยายส่วนต่อประสานโดยไม่จำเป็นต้องแก้ไขการใช้งานที่มีอยู่ ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะเรียกใช้การเริ่มต้นของวิธีการอย่างชัดเจนเมื่อวิธีการนั้นถูกเขียนทับหรือไม่พร้อมใช้งานเนื่องจากการใช้งานเริ่มต้นที่ขัดแย้งกันในอินเตอร์เฟสที่ต่างกัน interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // how to invoke A.foo() here? } } เมื่อพิจารณาจากโค้ดด้านบนคุณจะโทรA.foo()จากวิธีการของคลาส B ได้อย่างไร

11
เหตุใดจึงต้องใช้อินเตอร์เฟสที่ซ้อนกันแบบคงที่ใน Java
ฉันเพิ่งพบอินเทอร์เฟซซ้อนแบบคงที่ในรหัสฐานของเรา class Foo { public static interface Bar { /* snip */ } /* snip */ } ฉันไม่เคยเห็นสิ่งนี้มาก่อน นักพัฒนาดั้งเดิมไม่สามารถเข้าถึงได้ ดังนั้นฉันต้องถามดังนั้น: ความหมายอะไรที่อยู่เบื้องหลังส่วนต่อประสานคงที่ สิ่งที่จะเปลี่ยนถ้าผมเอาstatic? ทำไมทุกคนจะทำเช่นนี้?
235 java  interface  static 

7
การนำสองอินเตอร์เฟสมาใช้ในคลาสด้วยวิธีเดียวกัน วิธีการอินเทอร์เฟซใดถูกแทนที่
สองอินเตอร์เฟสที่มีชื่อเมธอดและลายเซ็นเหมือนกัน แต่ดำเนินการโดยชั้นเดียวแล้ววิธีการรวบรวมจะระบุวิธีการที่เป็นอินเตอร์เฟซที่? Ex: interface A{ int f(); } interface B{ int f(); } class Test implements A, B{ public static void main(String... args) throws Exception{ } @Override public int f() { // from which interface A or B return 0; } }

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