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

Java เป็นภาษาการเขียนโปรแกรมเชิงวัตถุในระดับสูงที่พัฒนาโดย Sun Microsystems ปัจจุบัน Java เป็นเจ้าของโดย Oracle ซึ่งซื้อ Sun ในปี 2010

13
ฉันควรเพิ่มคำนำหน้า“ Abstract” ในคลาสนามธรรมของฉันหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา Taskสมมติว่าฉันมีระดับนามธรรมชื่อ มีมาตรฐานหรืออนุสัญญาที่แนะนำให้ฉันควรตั้งชื่อAbstractTaskแทนหรือไม่?

1
มันสมเหตุสมผลหรือไม่ที่จะวัดความครอบคลุมตามเงื่อนไขสำหรับโค้ด Java 8?
ฉันสงสัยว่าการวัดการครอบคลุมโค้ดตามเงื่อนไขด้วยเครื่องมือปัจจุบันสำหรับ Java นั้นไม่ล้าสมัยหรือไม่นับตั้งแต่ Java 8 ออกมา ด้วย Java 8's OptionalและStreamเราสามารถหลีกเลี่ยงโค้ดย่อย / ลูปได้ซึ่งทำให้ง่ายต่อการได้รับความคุ้มครองตามเงื่อนไขสูงมากโดยไม่ต้องทดสอบพา ธ การประมวลผลที่เป็นไปได้ทั้งหมด ลองเปรียบเทียบโค้ด Java เก่ากับโค้ด Java 8: ก่อน Java 8: public String getName(User user) { if (user != null) { if (user.getName() != null) { return user.getName(); } } return "unknown"; } มี 3 เส้นทางการประมวลผลที่เป็นไปได้ในวิธีการข้างต้น เพื่อให้ได้ความคุ้มครองตามเงื่อนไข 100% เราจำเป็นต้องสร้างการทดสอบ …

2
เหตุใดจาวาใช้คำอธิบายประกอบ @Override แทนที่จะเป็นตัวดัดแปลง
อะไรคือแรงจูงใจที่ทำให้จาวาใช้@Overrideคำอธิบายประกอบแทนที่จะสร้างoverrideตัวดัดแปลงใหม่? @Override public String toString() { return ""; } เมื่อเทียบกับ public override String toString() { return ""; }
19 java 

3
มันเป็นสิ่งที่มีเหตุผลหรือไม่ที่จะส่งคืนสตรีมทุกครั้งที่เราจะคืนคอลเล็คชั่น?
ในขณะที่การพัฒนา API ของฉันที่ไม่ได้เชื่อมโยงกับรหัสดั้งเดิมใด ๆ ฉันมักจะพบว่าตัวเองเขียนวิธีการที่ Streams หมดจดไปป์ไลน์โดยการรวบรวมผลลัพธ์ ชอบสิ่งนี้: ImmutableSet<T> deriveSomethingMeaningfulFromPrivateState() { return myPrivateThingies.stream() .map(this::ownerOfThing) .map(Owner::socialStatus) .filter(SocialStatus::isHeAFineMatey) .collect(MyCustomCollectors.toImmutableSet()); } ตอนนี้ลูกค้าส่วนใหญ่ของคลาสนี้มักจะต้องการคอลเล็กชัน (ในกรณีนี้คือ ImmutableSet) เพื่อค้นหาองค์ประกอบและวนซ้ำ แต่ลูกค้าบางรายอาจได้รับประโยชน์จากการมีสตรีมดังนั้นพวกเขาจึงสามารถดำเนินการเพิ่มเติมได้ สตรีมโดยไม่จำเป็นต้องรับสตรีมใหม่จากคอลเล็กชัน ดังนั้นการส่งคืนสตรีมจะให้ตัวเลือกที่เหนือกว่าที่พวกเขามีหากพวกเขาเพิ่งมีการสะสม (หลังจากทั้งหมดพวกเขาสามารถcollect()สตรีมได้เสมอ: Stream<T> deriveSomethingMeaningfulFromPrivateState() { return myPrivateThingies.stream() .map(this::ownerOfthing) .map(Owner::socialStatus) .filter(SocialStatus::isHeAFineMatey); // No collect } วิธีการนี้ดึงดูดให้ฉันลองเพราะฉันไม่เห็นข้อบกพร่องใด ๆ ที่อาจเกิดขึ้น อย่างไรก็ตามฉันไม่เคยเห็นวิธีการนี้ในห้องสมุดใด ๆ (อาจเพราะไม่มีห้องสมุดจำนวนมากที่เผยแพร่หลังจากการปรากฏตัวของ Java 8) ดังนั้นฉันกลัวที่จะยอมรับมัน คลาสไลบรารีที่มีอยู่มักจะส่งคืนคอลเล็กชันเมื่อได้รับบางสิ่งจากสถานะส่วนตัว มีบางสิ่งที่ไม่ดีที่อาจเกิดขึ้นได้หรือไม่หากฉันตัดสินใจคืนสตรีมในที่ใดก็ตามที่ตัวเอง pre-Java-8 …

4
“ ใช้แผนที่แทนคลาสเพื่อแสดงข้อมูล” -Rich Hickey
ในวิดีโอนี้โดย Rich Hickeyผู้สร้าง Clojure เขาแนะนำให้ใช้แผนที่เพื่อแสดงข้อมูลแทนการใช้คลาสเพื่อเป็นตัวแทนของมันดังที่ทำใน Java ฉันไม่เข้าใจว่ามันจะดีกว่านี้ได้อย่างไรเนื่องจากผู้ใช้ API จะรู้ได้อย่างไรว่าปุ่มป้อนข้อมูลคืออะไรหากมีการแสดงเป็นแผนที่ ตัวอย่าง : PersonAPI { Person addPerson(Person obj); Map<String, Object> addPerson(Map<String, Object> personMap); } ในฟังก์ชั่นที่สองผู้ใช้ API จะรู้ได้อย่างไรว่าอินพุตใดที่จะสร้างบุคคล
19 java  design  class  clojure  map 

8
ประโยชน์ของการสลับใช้ Strings ใน Java 7 คืออะไร
เมื่อฉันเริ่มโปรแกรมใน Java ความจริงที่ว่างบ switch ไม่ได้ทำให้สายผิดหวัง จากนั้นในการใช้ Enums ฉันตระหนักถึงประโยชน์ที่คุณได้รับกับพวกเขาแทนที่จะส่งผ่านค่าดิบ - ความปลอดภัยของประเภท ฉันกำลังดิ้นรนที่จะนึกถึงสถานการณ์ที่มี SE7 ตอนนี้ฉันตัดสินใจที่จะใช้สวิตช์ที่มีสตริงเป็นอินพุตแทนที่จะเป็น Enums หากพวกเขาจะดำเนินการผ่านการเปลี่ยนสตริงทั้งหมด (เช่นมากกว่าการแข่งขันบางส่วนหรือ regex) ก็ดูเหมือนจะไม่ให้เหตุผลน้อยกว่ารหัสที่จะเปลี่ยน และด้วยเครื่องมือ IDE และอัตราส่วนการอ่าน - เขียนของการเขียนโค้ดฉันจะมีความสุขมากขึ้นในการสร้าง Enum พิเศษโดยอัตโนมัติมากกว่าการส่งผ่านค่าสตริง พวกเขานำประโยชน์อะไรมาให้เราในฐานะโปรแกรมเมอร์ จานหม้อไอน้ำน้อยลงหรือไม่ ไม่รู้สึกว่าภาษากำลังใช้งานคุณสมบัตินี้ แม้ว่าอาจจะมีกรณีการใช้งานที่ฉันมองเห็น

4
วิธีการสร้างรหัส OO ที่ดีขึ้นในแอปพลิเคชันที่ขับเคลื่อนด้วยฐานข้อมูลเชิงสัมพันธ์ซึ่งฐานข้อมูลนั้นได้รับการออกแบบไม่ดี
ฉันกำลังเขียนโปรแกรมเว็บ Java ที่ประกอบด้วยส่วนใหญ่ของหน้าคล้ายกันที่ทุกหน้ามีหลายตารางและตัวกรองที่ใช้กับตารางเหล่านั้น ข้อมูลในตารางเหล่านี้มาจากฐานข้อมูล SQL ฉันใช้ myBatis เป็น ORM ซึ่งอาจไม่ใช่ตัวเลือกที่ดีที่สุดในกรณีของฉันเนื่องจากฐานข้อมูลได้รับการออกแบบไม่ดีและ mybatis เป็นเครื่องมือที่มุ่งเน้นฐานข้อมูลมากขึ้น ฉันพบว่าฉันกำลังเขียนรหัสซ้ำกันมากมายเนื่องจากเนื่องจากการออกแบบที่ไม่ดีของฐานข้อมูลฉันต้องเขียนแบบสอบถามที่แตกต่างกันสำหรับสิ่งที่คล้ายกันเนื่องจากแบบสอบถามเหล่านั้นอาจแตกต่างกันมาก นั่นคือฉันไม่สามารถหาพารามิเตอร์ของแบบสอบถามได้อย่างง่ายดาย สิ่งนี้แพร่กระจายเข้าไปในรหัสของฉันและแทนที่จะเติมแถวในคอลัมน์ในตารางของฉันด้วยการวนรอบแบบง่ายฉันมีรหัสเช่น: ได้รับข้อมูล (p1, ... , ปี่); รับข้อมูลB (p1, ... , pi); รับข้อมูลC (p1, ... , pi); รับข้อมูลD (p1, ... , pi); ... และในไม่ช้านี้จะระเบิดเมื่อเรามีตารางที่แตกต่างกันและมีคอลัมน์ต่างกัน นอกจากนี้ยังเพิ่มความซับซ้อนให้กับความจริงที่ว่าฉันใช้ "ประตู" ซึ่งมีผลต่อการแมปวัตถุกับองค์ประกอบ html ในหน้าเว็บ ดังนั้นโค้ด Java ของฉันจึงกลายเป็นอะแดปเตอร์ระหว่างฐานข้อมูลและส่วนหน้าซึ่งทำให้ฉันสร้างการเดินสายจำนวนมากโค้ดสำเร็จรูปที่มีตรรกะบางอย่างแทรกอยู่ภายใน วิธีการแก้ปัญหาที่ถูกต้องจะห่อหุ้ม mappers ORM ด้วย extralayer …

4
การจัดทำเอกสารตรรกะทางคณิตศาสตร์ในรหัส
บางครั้งถึงแม้ไม่บ่อยนักฉันก็ต้องรวมตรรกะคณิตศาสตร์ไว้ในรหัสด้วย แนวคิดที่ใช้ส่วนใหญ่จะง่ายมาก แต่โค้ดผลลัพธ์ไม่ใช่ - ตัวแปรจำนวนมากที่มีจุดประสงค์ที่ไม่ชัดเจนและการดำเนินการบางอย่างที่มีเจตนาไม่ชัดเจน ผมไม่ได้หมายความว่ารหัสไม่สามารถอ่านหรือ unmaintainable เพียงแค่ว่ามันเป็นwaaaayยากที่จะเข้าใจกว่าปัญหาทางคณิตศาสตร์ที่เกิดขึ้นจริง ฉันพยายามที่จะแสดงความคิดเห็นส่วนที่ยากที่สุดที่จะเข้าใจ แต่มีปัญหาเช่นเดียวกับในเวลาเพียงเข้ารหัสพวกเขา - ข้อความที่ไม่ได้มีการแสดงพลังของคณิตศาสตร์ ฉันกำลังมองหาวิธีที่มีประสิทธิภาพและเข้าใจได้ง่ายขึ้นในการอธิบายตรรกะที่อยู่เบื้องหลังโค้ดที่ซับซ้อนบางอย่างโดยเฉพาะอย่างยิ่งในโค้ดเอง ฉันถือว่า TeX - เขียนเอกสารและสร้างแยกต่างหากจากรหัส แต่ฉันต้องเรียนรู้ TeX และเอกสารจะไม่อยู่ในโค้ด อีกสิ่งหนึ่งที่ฉันคิดคือการถ่ายรูปสัญลักษณ์ทางคณิตศาสตร์สมการและไดอะแกรมที่เขียนบนกระดาษ / ไวท์บอร์ดและรวมไว้ใน javadoc มีวิธีที่ง่ายและชัดเจนกว่าหรือไม่? PS การให้ชื่อที่สื่อความหมาย ( timeOfFirstEventแทนt1) กับตัวแปรทำให้โค้ดมีความละเอียดมากขึ้นและอ่านได้ยากขึ้น

7
การเขียนโปรแกรมแบบแยกส่วนมีผลต่อเวลาคำนวณหรือไม่
ทุกคนบอกว่าฉันควรทำให้โค้ดเป็นโมดูล แต่มันไม่ได้มีประสิทธิภาพน้อยกว่าถ้าฉันใช้วิธีการโทรมากกว่าวิธีที่น้อยกว่า แต่มีขนาดใหญ่กว่า ความแตกต่างใน Java, C หรือ C ++ สำหรับเรื่องนั้นคืออะไร? ฉันเข้าใจว่าการแก้ไขอ่านและทำความเข้าใจได้ง่ายขึ้นโดยเฉพาะในกลุ่ม ดังนั้นการสูญเสียเวลาในการคำนวณจึงไม่มีนัยสำคัญเมื่อเทียบกับประโยชน์ความเป็นระเบียบเรียบร้อยของรหัส?
19 java  c++  c  efficiency 

6
ภาษาโปรแกรมที่อนุญาตให้คุณกำหนดขีด จำกัด ใหม่สำหรับประเภทอย่างง่าย
หลายภาษาชอบC++, C#และJavaช่วยให้คุณสามารถสร้างวัตถุที่เป็นตัวแทนของประเภทง่ายๆเช่นหรือinteger floatการใช้อินเตอร์เฟสคลาสคุณสามารถแทนที่โอเปอเรเตอร์และดำเนินการตรรกะเช่นตรวจสอบว่าค่าเกินกว่ากฎธุรกิจ 100 ฉันสงสัยว่าในบางภาษาอาจมีการกำหนดกฎเหล่านี้เป็นคำอธิบายประกอบหรือคุณสมบัติของตัวแปร / คุณสมบัติ ตัวอย่างเช่นในC#คุณอาจเขียน: [Range(0,100)] public int Price { get; set; } หรือบางทีC++คุณอาจจะเขียน: int(0,100) x = 0; ฉันไม่เคยเห็นอะไรแบบนี้มาก่อน แต่ได้รับความเชื่อถือในการตรวจสอบข้อมูลก่อนการจัดเก็บ แปลกที่ฟีเจอร์นี้ไม่ได้ถูกเพิ่มลงในภาษา คุณช่วยยกตัวอย่างภาษาที่เป็นไปได้ไหม

1
จะรวมใบอนุญาตสำหรับการพึ่งพา Maven ของบุคคลที่สามได้อย่างไร
ฉันผลิตไบนารีที่แจกจ่ายได้สำหรับโครงการ Java ของฉัน ฉันปล่อยสองวิธี: Maven Central ซิปกระจายได้ในรหัส Google โครงการของฉันได้รับอนุญาตภายใต้ใบอนุญาต Apache 2.0 ฉันใช้บุคคลที่สามจำนวนน้อยซึ่งหนึ่งในนั้นเป็นลิขสิทธิ์ของ MIT ฉันเชื่อว่ามันเป็นหน้าที่ของฉันที่จะทำให้ผู้ใช้ของโครงการของฉันตระหนักถึงเนื้อหาของใบอนุญาตตามข้อความต่อไปนี้จากใบอนุญาต: ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือบางส่วนที่สำคัญของซอฟต์แวร์ ฉันจะอ้างอิงสิ่งนี้ได้ดีที่สุดภายในแหล่งที่มาของฉันและของฉันแจกจ่ายได้อย่างไร ฉันกำลังคิด: ไฟล์ต้นฉบับของฉันไม่จำเป็นต้องอ้างอิงอะไรเลย พวกเขาเพียงแค่แจ้งให้ทราบล่วงหน้า Apache 2.0 ของฉัน ฉันเพิ่มไฟล์ LICENSE.txt ที่รากของโครงการของฉันรวมถึงข้อความลิขสิทธิ์ Apache 2.0 สำหรับซิปที่แจกจ่ายได้ของฉันฉันต้องเพิ่มบางอย่างที่บ่งชี้ว่าส่วนประกอบได้รับอนุญาตจาก MIT อาจเป็นไฟล์ประกาศ? สำหรับการกระจาย Maven Central ของฉันฉันไม่จำเป็นต้องทำอะไรเลยเพราะสิ่งประดิษฐ์ของฉันเพิ่งประกาศการพึ่งพา แต่ก็ไม่ได้รวมสิ่งเหล่านั้น ดูเหมือนว่าแผนที่ถูกต้องหรือไม่ ถ้าเป็นเช่นนั้นทุกคนสามารถแนะนำวิธีการบรรลุจุดที่ 3

5
Joda Time กับ Java Time
ถึงแม้ว่า Joda จะมีคุณสมบัติที่หลากหลายและมีความซับซ้อนมากกว่าเวลา Java มาตรฐาน แต่ก็อาจไม่ใช่สิ่งที่ดีที่สุดในการใช้งานเสมอไป ฉันจะตัดสินใจได้อย่างไรว่าฉันควรใช้ Joda Time หรือ Java Time ในโค้ด Java ใด ๆ มีแนวทางบางอย่างที่บอกเราว่าจะเลือกแนวทางที่เหมาะสมหรือไม่ขึ้นอยู่กับข้อกำหนดของเรา
19 java  api  joda-time 

3
ส่วนต่อท้ายข้อยกเว้นเกี่ยวกับข้อยกเว้นใน java
การระบุคำต่อท้ายของข้อยกเว้นในคลาสข้อยกเว้นรู้สึกเหมือนมีกลิ่นรหัสให้ฉัน (ข้อมูลที่ซ้ำซ้อน - ส่วนที่เหลือของชื่อแสดงถึงสถานะข้อผิดพลาดและสืบทอดมาจากข้อยกเว้น) อย่างไรก็ตามมันก็ดูเหมือนว่าทุกคนทำและดูเหมือนว่าจะเป็นแนวปฏิบัติที่ดี ฉันกำลังมองหาที่จะเข้าใจว่าทำไมการปฏิบัติที่ดีนี้ ฉันเคยเห็นและอ่านคำถามแล้วว่าทำไมข้อยกเว้นมักจะมีข้อยกเว้นต่อท้ายในชื่อชั้นเรียน คำถามสำหรับ PHP และในขณะที่การตอบสนองอาจใช้ได้สำหรับ Java มีข้อโต้แย้งอื่น ๆ หรือว่าเป็นเรื่องง่ายเหมือนการแยกแยะพวกเขาอย่างชัดเจน? หากเรานำตัวอย่างจากคำถามก่อนหน้านี้ - อาจมีคลาสใน java ด้วยชื่อFileNoFoundที่ไม่มีข้อยกเว้นหรือไม่ หากมีอาจเป็นไปได้หรือไม่ที่รับประกันว่าจะได้รับการรับรองด้วยExceptionหรือไม่ การดูลำดับชั้นอย่างรวดเร็วในสุริยุปราคาExceptionนั่นเองส่วนใหญ่ของพวกเขามีส่วนต่อท้ายของข้อยกเว้น แต่มีข้อยกเว้นเล็กน้อย javassistเป็นตัวอย่างของห้องสมุดที่ดูเหมือนว่าจะมีข้อยกเว้นบางประการโดยไม่ต้องต่อท้ายด้วย - เช่นBadByteCode, BadHttpRequestฯลฯ BouncyCastle เป็น lib อื่นที่มีข้อยกเว้นเช่น CompileError ฉันไปรอบ ๆ ด้วยข้อมูลเล็กน้อยในเรื่อง

3
decoupling คนที่กล้าหาญ DRY เป็น REST หรือไม่?
ฉันกำลังสร้าง REST API เพื่อแสดงการทำงานส่วนใหญ่ของ Java API ที่มีอยู่ API ทั้งสองมีไว้สำหรับใช้ภายในองค์กรของฉัน ฉันไม่ต้องออกแบบเพื่อใช้ภายนอก ฉันมีอิทธิพลเหนือ API ทั้งคู่ แต่กำลังใช้งาน REST อยู่ Java API จะยังคงใช้งานต่อไปสำหรับแอปพลิเคชันในพื้นที่ (ไม่ใช่ "เลิกใช้") แต่ REST API จะใช้สำหรับการพัฒนาใหม่ที่สำคัญ บางคลาส Java API เป็นเพียงข้อมูล (beans ที่มีคุณสมบัติ, getters, setters) และอย่างน้อยสิ่งเหล่านี้ก็เหมาะสมที่จะส่งผ่าน (ในบางรูปแบบ) ผ่าน REST API เป็นข้อมูล (ซึ่งจะถูกจัดให้อยู่ในรูปแบบ XML หรือ JSON) ตัวอย่างเช่นคลาสที่เก็บข้อมูลเกี่ยวกับเครื่องเซิร์ฟเวอร์ ฉันกำลังเผชิญกับตัวเลือกต่อไปนี้สำหรับคลาสข้อมูลเหล่านี้: ฉัน ... เปิดเผยคลาส Java ดั้งเดิม …
19 java  api  rest  coupling  dry 

3
ชื่อแพ็กเกจใดที่จะเลือกสำหรับโครงการ Java ขนาดเล็กแบบโอเพ่นซอร์ส [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันต้องการเผยแพร่ไลบรารีโอเพนซอร์สขนาดเล็กใน Java ฉันสงสัยว่าฉันควรเลือกชื่อแพ็คเกจอะไร ฉันไม่ใช่ บริษัท และฉันไม่มีโดเมนที่ฉันสามารถใช้เป็นพื้นฐานสำหรับการตั้งชื่อแพ็คเกจตามข้อกำหนดการตั้งชื่อได้ ยังฉันต้องการที่จะปฏิบัติตามอนุสัญญาการตั้งชื่อเพื่อป้องกันความขัดแย้งโดยไม่ตั้งใจและเพื่อให้สิ่งต่าง ๆ มาตรฐาน

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