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

Java 8 หมายถึงแพลตฟอร์ม Java เวอร์ชันใหม่ล่าสุด

1
เป็นการดีที่จะใช้วิธีการเริ่มต้น Java 8 สองวิธีในแง่ของกันและกัน?
ฉันออกแบบอินเทอร์เฟซด้วยสองวิธีที่เกี่ยวข้องคล้ายกับสิ่งนี้: public interface ThingComputer { default Thing computeFirstThing() { return computeAllThings().get(0); } default List<Thing> computeAllThings() { return ImmutableList.of(computeFirstThing()); } } การใช้งานประมาณครึ่งหนึ่งจะคำนวณสิ่งหนึ่งเท่านั้นในขณะที่อีกครึ่งหนึ่งอาจคำนวณเพิ่มเติมได้ สิ่งนี้มีแบบอย่างใด ๆ ในโค้ด Java 8 ที่ใช้กันอย่างแพร่หลายหรือไม่? ฉันรู้ว่า Haskell ทำสิ่งที่คล้ายกันในบางประเภทEqของตัวอย่าง( เช่น) ข้อเสียคือฉันต้องเขียนโค้ดน้อยกว่าอย่างมากถ้าฉันมีบทคัดย่อสองคลาส ( SingleThingComputerและMultipleThingComputer) ข้อเสียก็คือการคอมไพล์การดำเนินงานที่ว่างเปล่า StackOverflowErrorแต่พัดขึ้นที่รันไทม์กับ เป็นไปได้ที่จะตรวจสอบการเรียกซ้ำซึ่งกันและกันด้วย a ThreadLocalและให้ข้อผิดพลาดที่ดีกว่า แต่นั่นเป็นการเพิ่มโอเวอร์เฮดให้กับโค้ดที่ไม่ใช่บั๊ก

5
“ ส่วนต่อประสานคงที่” เป็นแนวปฏิบัติที่ดีหรือไม่?
ฉันเพิ่งสังเกตเห็นว่ามีตัวเลือกให้มีวิธีการคงที่ในส่วนต่อประสาน เช่นเดียวกับฟิลด์คงที่ของอินเตอร์เฟสมีพฤติกรรมที่น่าสนใจ: สิ่งเหล่านี้ไม่ได้รับการสืบทอด ฉันไม่แน่ใจว่ามีประโยชน์ใด ๆ ในส่วนต่อประสานที่เกิดขึ้นจริง อย่างไรก็ตามมันทำให้โปรแกรมเมอร์สามารถสร้างส่วนต่อประสานที่เป็นเพียงซองจดหมายสำหรับสิ่งของแบบคงที่เช่นคลาสยูทิลิตี้ ตัวอย่างง่ายๆเป็นเพียงซองจดหมายสำหรับค่าคงที่ทั่วโลก เมื่อเทียบกับชั้นเรียนคุณสามารถสังเกตเห็นว่าแผ่นที่ขาดหายไปpublic static finalนั้นง่ายกว่าที่คิด (ทำให้มันน้อยลง) public interface Constants { String LOG_MESSAGE_FAILURE = "I took an arrow to the knee."; int DEFAULT_TIMEOUT_MS = 30; } คุณสามารถสร้างบางสิ่งที่ซับซ้อนกว่านี้ได้เช่นคีย์หลอกหลอก enum ของ config public interface ConfigKeys { static createValues(ConfigKey<?>... values) { return Collections.unmodifiableSet(new HashSet(Arrays.asList(values))); } static ConfigKey<T> key(Class<T> …
13 java  java8 

2
อินสแตนซ์ Java 8 Stream ควรจะปิด () เสมอหรือไม่
Quad the Javadoc : สตรีมมีเมธอด BaseStream.close () และใช้ AutoCloseable แต่อินสแตนซ์สตรีมเกือบทั้งหมดไม่จำเป็นต้องปิดจริงหลังการใช้งาน โดยทั่วไปเฉพาะสตรีมที่มีแหล่งที่มาเป็นแชนเนล IO (เช่นที่ส่งคืนโดย Files.lines (Path, Charset)) เท่านั้นที่จะต้องปิด สตรีมส่วนใหญ่ได้รับการสนับสนุนโดยคอลเลกชันอาร์เรย์หรือการสร้างฟังก์ชั่นซึ่งไม่จำเป็นต้องมีการจัดการทรัพยากรพิเศษ (หากกระแสต้องปิดก็สามารถประกาศเป็นทรัพยากรในงบลองกับทรัพยากร) "เกือบทั้งหมด" และ "โดยทั่วไป" นั้นคลุมเครือ - ถ้าคุณกำลังเขียนไลบรารีและคุณกำลังสรุปแหล่งที่มาของสตรีมของคุณจากผู้ใช้สตรีมนั้นคุณต้องถามตัวเองเสมอ - "ฉันควรปิดหรือไม่ นี้?" IO-ได้รับการสนับสนุนสตรีมจะต้องมีการปิดเพราะการดำเนินงานสถานีไม่ได้เรียกcloseเพื่อให้ได้อย่างมีประสิทธิภาพฉันมักจะมีทั้งจำ / เอกสารที่สตรีมของฉันมาจากหรือฉันมักจะต้องcloseมัน ตัวเลือกนิวเคลียร์ที่ฉันคิดว่าน่าจะไม่ส่งคืนสตรีมจากวิธีการหรือยอมรับพารามิเตอร์สตรีมซึ่งเป็นความเชื่อมั่นที่บางคนสะท้อนในทีม JDK ฉันพบว่ามัน จำกัด มากเกินไปเมื่อพิจารณาถึงประโยชน์ในทางปฏิบัติของสตรีม อะไรคือวิธีปฏิบัติที่ดีที่สุดของคุณเกี่ยวกับการปิดสายธาร ฉันดูออนไลน์เพื่อหาคำตอบสำหรับเรื่องนี้จากบางคนของ JDK ที่มักจะใช้งานกับคำถามชุมชนที่คล้ายกัน แต่ไม่พบสิ่งใดที่เกี่ยวข้อง
12 java  resources  java8 

1
เหตุผลในการลบประเภทฟังก์ชั่นใน Java 8
ฉันพยายามเข้าใจว่าเพราะเหตุใด JDK 8 Lambda Expert Group (EG) จึงตัดสินใจไม่รวมฟังก์ชันประเภทใหม่ลงในภาษาการเขียนโปรแกรม Java ไปกว่ารายการทางผมพบว่าหัวข้อที่มีการอภิปรายเกี่ยวกับการกำจัดของประเภทฟังก์ชั่น ข้อความหลายข้อคลุมเครือสำหรับฉันอาจเป็นเพราะการขาดบริบทและในบางกรณีเนื่องจากความรู้ที่ จำกัด ของฉันเกี่ยวกับการใช้งานระบบพิมพ์ อย่างไรก็ตามมีคำถามสองสามข้อที่ฉันเชื่อว่าฉันสามารถกำหนดได้อย่างปลอดภัยในไซต์นี้เพื่อช่วยให้ฉันเข้าใจได้ดีขึ้นว่าพวกเขาหมายถึงอะไร ฉันรู้ว่าฉันสามารถถามคำถามในรายการส่งเมลได้ แต่เธรดเก่าและการตัดสินใจทั้งหมดได้ทำไปแล้วดังนั้นโอกาสที่ฉันจะถูกเพิกเฉยเหนือสิ่งอื่นใดที่เห็นว่าคนเหล่านี้มีแผนล่าช้าอยู่แล้ว ในคำตอบของเขาที่ให้การสนับสนุนการลบประเภทฟังก์ชั่นและรับรองการใช้งาน SAM ประเภท Brian Goetz พูดว่า: ไม่มีการดัดแปลง มีเธรดที่ยาวเกี่ยวกับประโยชน์ของการปรับประเภทของฟังก์ชัน ประเภทฟังก์ชั่นจะ hobbled ฉันไม่พบกระทู้ที่เขาพูดถึง ตอนนี้ฉันสามารถเข้าใจได้ว่าการแนะนำฟังก์ชั่นโครงสร้างอาจหมายถึงภาวะแทรกซ้อนบางอย่างในระบบจาวาส่วนใหญ่ที่ระบุสิ่งที่ฉันไม่เข้าใจคือประเภท SAM parametrized แตกต่างกันในแง่ของการทำให้ใหม่ พวกเขาทั้งคู่ต่างก็ประสบปัญหาการทำให้เหมือนกันหรือไม่? ใครบ้างเข้าใจว่าประเภทฟังก์ชั่นแตกต่างจากประเภท SAM parametrized ในแง่ของการทำให้ใหม่? ในความคิดเห็นอื่น Goetz พูดว่า: มีสองวิธีพื้นฐานในการพิมพ์: ชื่อและโครงสร้าง ตัวตนของชื่อจะขึ้นอยู่กับชื่อของมัน ตัวตนของโครงสร้างประเภทนั้นขึ้นอยู่กับสิ่งที่มันประกอบไปด้วย (เช่น "tuple of int, int" หรือ "ฟังก์ชั่นจาก …

2
มีเหตุผลใดที่จะไม่ใช้ตัวเลือกเป็นอาร์กิวเมนต์วิธีในกรณีที่คุณรู้ว่าอาร์กิวเมนต์เป็นสิ่งที่อาจหรือไม่จำเป็น?
ด้วย Java 8 ฉันได้เห็นบทความมากขึ้นเกี่ยวกับการใช้ตัวเลือก / ตัวเลือก ฉันเข้าใจสิ่งที่พวกเขาพยายามเป็นตัวแทนและฉันเห็นตัวอย่างมากมายของพวกเขาที่ใช้เป็นผลตอบแทน อย่างไรก็ตามสิ่งที่ฉันไม่เห็นก็คือพวกมันถูกใช้เป็นข้อโต้แย้งเมธอด / ฟังก์ชั่นในภาษาที่ไม่มีไวยากรณ์สำหรับพารามิเตอร์เริ่มต้น / ทางเลือก มีเหตุผลใดที่จะไม่ใช้Optionalเป็นอาร์กิวเมนต์วิธีในกรณีที่คุณรู้ว่าอาร์กิวเมนต์เป็นสิ่งที่อาจหรืออาจไม่จำเป็น? นี่คือตัวอย่างที่ฉันคิดได้: Optional<Customer> lookupCustomer(String firstName, Optional<String> middleName, String lastName)

1
การเรียงลำดับด้วย java 8 สตรีมทำงานอย่างไรภายใต้ประทุน?
เมื่อฉันเรียกว่าStream.sort(..)มีอาร์เรย์ขององค์ประกอบใหม่ที่สร้างขึ้นและสตรีม iterates มากกว่าอาร์เรย์ที่เรียงใหม่ที่สร้างขึ้น? กล่าวอีกนัยหนึ่งว่า Java 8 Stream ทำsortอะไรได้บ้าง?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.