คำถามติดแท็ก anonymous-class

15
เหตุใดจึงสามารถเข้าถึงตัวแปรสุดท้ายในคลาสที่ไม่ระบุชื่อได้
aสามารถสุดท้ายได้ที่นี่ ทำไม? ฉันสามารถโอนสิทธิaในonClick()วิธีการโดยไม่ต้องทำให้มันเป็นสมาชิกเอกชน? private void f(Button b, final int a){ b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int b = a*5; } }); } ฉันจะคืนค่า5 * aเมื่อคลิกได้อย่างไร? ฉันหมายถึง, private void f(Button b, final int a){ b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int b = a*5; …


11
จะส่งพารามิเตอร์ไปยังคลาสที่ไม่ระบุชื่อได้อย่างไร
เป็นไปได้ไหมที่จะส่งผ่านพารามิเตอร์หรือเข้าถึงพารามิเตอร์ภายนอกไปยังคลาสที่ไม่ระบุชื่อ ตัวอย่างเช่น: int myVariable = 1; myButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // How would one access myVariable here? } }); มีวิธีใดบ้างสำหรับผู้ฟังที่เข้าถึง myVariable หรือผ่าน myVariable โดยไม่ต้องสร้าง listener เป็นคลาสที่มีชื่อจริง?

2
เข้าถึง“ this” จาก Java anonymous class
รับรหัสต่อไปนี้: public interface Selectable { public void select(); } public class Container implements Selectable { public void select() { ... } public void createAnonymousClass() { Selectable s = new Selectable() { public void select() { //see comment below. } }; } } ฉันต้องการเข้าถึงContainer.select()จากภายในselect()วิธีการเรียนที่ไม่ระบุชื่อ อย่างไรก็ตามthis.select()จะเรียกselect()วิธีการของคลาสที่ไม่ระบุชื่ออีกครั้ง ข้อเสนอแนะของฉันจะเป็น: แนะนำเขตข้อมูลลงในคอนเทนเนอร์เช่น private Container self = …

7
Java8 Lambdas เทียบกับคลาส Anonymous
เนื่องจาก Java8 ได้รับการเผยแพร่เมื่อไม่นานมานี้และนิพจน์แลมบ์ดาใหม่เอี่ยมนั้นดูดีมากฉันสงสัยว่านี่หมายถึงการตายของคลาส Anonymous ที่เราคุ้นเคยหรือไม่ ฉันได้ค้นคว้าข้อมูลเล็กน้อยเกี่ยวกับเรื่องนี้และพบตัวอย่างที่น่าสนใจเกี่ยวกับวิธีที่นิพจน์แลมบ์ดาจะแทนที่คลาสเหล่านั้นอย่างเป็นระบบเช่นวิธีการจัดเรียงของคอลเลคชันซึ่งเคยได้รับอินสแตนซ์ของตัวเปรียบเทียบแบบไม่ระบุชื่อเพื่อทำการจัดเรียง: Collections.sort(personList, new Comparator<Person>(){ public int compare(Person p1, Person p2){ return p1.firstName.compareTo(p2.firstName); } }); ตอนนี้สามารถทำได้โดยใช้ Lambdas: Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName)); และดูกระชับอย่างน่าประหลาด. คำถามของฉันคือมีเหตุผลอะไรที่จะใช้คลาสเหล่านั้นใน Java8 แทน Lambdas ต่อไปหรือไม่? แก้ไข คำถามเดียวกัน แต่ในทางตรงกันข้ามประโยชน์ของการใช้ Lambdas แทนคลาส Anonymous คืออะไรเนื่องจาก Lambdas สามารถใช้ได้กับอินเทอร์เฟซวิธีการเดียวเท่านั้นคุณลักษณะใหม่นี้เป็นเพียงทางลัดที่ใช้ในบางกรณีเท่านั้นหรือมีประโยชน์จริงหรือไม่

6
การสืบทอดหลายรายการสำหรับคลาสที่ไม่ระบุชื่อ
คลาสที่ไม่ระบุชื่อสามารถใช้สองอินเทอร์เฟซ (หรือมากกว่า) ได้อย่างไร? หรืออีกวิธีหนึ่งวิธีที่สามารถมันทั้งขยายชั้นเรียนและการใช้อินเตอร์เฟซอยู่แล้ว? ตัวอย่างเช่นฉันต้องการสร้างออบเจ็กต์ของคลาสที่ไม่ระบุชื่อที่ขยายสองอินเทอร์เฟซ: // Java 10 "var" is used since I don't know how to specify its type var lazilyInitializedFileNameSupplier = (new Supplier<String> implements AutoCloseable)() { private String generatedFileName; @Override public String get() { // Generate file only once if (generatedFileName == null) { generatedFileName = generateFile(); } …

6
Java 8 Lambda Expressions - วิธีการหลายอย่างในคลาสที่ซ้อนกัน
ฉันกำลังอ่านเกี่ยวกับคุณสมบัติใหม่ที่: http://www.javaworld.com/article/2078836/java-se/love-and-hate-for-java-8.html ฉันเห็นตัวอย่างด้านล่าง: การใช้คลาส Anonymous: button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println("Action Detected"); } }); ด้วย Lambda: button.addActionListener(e -> { System.out.println("Action Detected"); }); บางคนจะทำอย่างไรกับ a MouseListenerถ้าพวกเขาต้องการใช้หลายวิธีในคลาสที่ไม่ระบุตัวตนเช่น public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.