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

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

9
เหตุใดการใช้สิทธิพิเศษเพิ่มเติมเพื่อตรวจสอบตัวแปร
นำตัวอย่างโค้ดสองตัวอย่าง: if(optional.isPresent()) { //do your thing } if(variable != null) { //do your thing } เท่าที่ฉันสามารถบอกความแตกต่างที่ชัดเจนที่สุดคือตัวเลือกต้องสร้างวัตถุเพิ่มเติม อย่างไรก็ตามหลายคนเริ่มใช้ตัวเลือกอย่างรวดเร็ว ข้อดีของการใช้ตัวเลือกกับการตรวจสอบค่า Null คืออะไร?
25 java  java8 

9
จะสื่อสารลำดับการแทรกนั้นสำคัญอย่างไรในแผนที่?
ฉันกำลังดึงชุดของสิ่งอันดับจากฐานข้อมูลและวางลงในแผนที่ แบบสอบถามฐานข้อมูลมีราคาแพง ไม่มีการจัดเรียงองค์ประกอบตามธรรมชาติที่เห็นได้ชัดในแผนที่ แต่ลำดับการแทรกยังคงสำคัญ การเรียงลำดับแผนที่จะเป็นการดำเนินการที่หนักหน่วงดังนั้นฉันต้องการหลีกเลี่ยงการทำเช่นนั้นเนื่องจากผลลัพธ์แบบสอบถามนั้นได้เรียงลำดับตามที่ฉันต้องการแล้ว ดังนั้นฉันเพิ่งเก็บผลลัพธ์แบบสอบถามลงในLinkedHashMapและส่งคืนแผนที่จากวิธี DAO: public LinkedHashMap<Key, Value> fetchData() ฉันมีวิธีprocessDataที่ควรทำการประมวลผลบนแผนที่ - แก้ไขค่าบางอย่างเพิ่มคีย์ / ค่าใหม่ มันถูกกำหนดให้เป็น public void processData(LinkedHashMap<Key, Value> data) {...} อย่างไรก็ตาม linters หลายตัว (Sonar ฯลฯ ) บ่นว่าประเภทของ 'data' ควรเป็นส่วนต่อประสานเช่น 'Map' แทนที่จะใช้ "LinkedHashMap" ( squid S1319 ) โดยพื้นฐานแล้วมันบอกว่าฉันควรจะมี public void processData(Map<Key, Value> data) {...} แต่ฉันต้องการให้ลายเซ็นของวิธีการบอกว่าลำดับของแผนที่มีความสำคัญกับอัลกอริธึมprocessDataเพื่อที่ว่าวิธีการของฉันจะไม่ผ่านแผนที่แบบสุ่มใด ๆ ฉันไม่ต้องการใช้SortedMapเพราะ (จากjavadoc …
24 java  code-quality  map 

5
ใน Java ผู้ช่วยส่วนตัวควรไปด้านบนหรือด้านล่างวิธีสาธารณะ? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันสังเกตเห็นว่าผู้ร่วมงานกับฉันมีแนวปฏิบัติที่ตรงกันข้ามเกี่ยวกับการเรียงลำดับวิธีการในคลาส Java ของเรา หนึ่งในเราเริ่มเรียนด้วยวิธีการสาธารณะที่สำคัญแล้วให้ผู้ช่วยส่วนตัวทั้งหมดหลังจากนั้น อีกคนหนึ่งของเราทำให้แน่ใจว่าวิธีการสาธารณะเป็นจุดสิ้นสุด เห็นได้ชัดว่านี่เป็นเพียงปัญหาสไตล์และไม่มีคำตอบที่ถูกต้อง อย่างไรก็ตามก่อนที่เราจะตัดสินใจว่าเรื่องนี้เป็นอีกการต่อสู้ของ Yooks vs Zooks และเลือกอย่างใดอย่างหนึ่งโดยพลการฉันสงสัยว่าบางทีอาจจะมีคำแนะนำสไตล์ Java มาตรฐานหรือเหตุผลบางประการที่ทำไมวิธีหนึ่งดีกว่าวิธีอื่น

9
การฉีดพึ่งพา: ฉันควรใช้กรอบ?
ฉันเพิ่งทำงานกับโครงการ Python ที่เราทำการฉีดอย่างหนัก (เพราะเราต้องเพื่อให้แอปทดสอบได้) แต่เราไม่ได้ใช้เฟรมเวิร์กใด ๆ บางครั้งมันก็น่าเบื่อนิดหน่อยเมื่อเทียบกับการพึ่งพาทั้งหมดด้วยตนเอง แต่โดยรวมแล้วก็ใช้งานได้ดี เมื่อวัตถุต้องถูกสร้างในหลาย ๆ ที่เราก็มีฟังก์ชั่น (บางครั้งเป็นวิธีการเรียนของวัตถุนั้น) เพื่อสร้างอินสแตนซ์การผลิต ฟังก์ชั่นนี้ถูกเรียกเมื่อใดก็ตามที่เราต้องการวัตถุนั้น ในการทดสอบเราทำสิ่งเดียวกัน: หากหลายครั้งเราจำเป็นต้องสร้าง 'รุ่นทดสอบ' ของวัตถุ (เช่นอินสแตนซ์จริงที่ถูกสำรองข้อมูลโดยวัตถุจำลอง) เรามีฟังก์ชั่นเพื่อสร้าง 'รุ่นทดสอบ' นี้ ของคลาสที่จะใช้ในการทดสอบ ดังที่ฉันพูดโดยทั่วไปแล้วสิ่งนี้ใช้ได้ดี ตอนนี้ฉันกำลังเข้าสู่โครงการ Java ใหม่และเรากำลังตัดสินใจว่าจะใช้เฟรมเวิร์ก DI หรือทำ DI ด้วยตนเอง (เช่นในโครงการก่อนหน้านี้) โปรดอธิบายว่าการทำงานกับกรอบงาน DI จะแตกต่างกันอย่างไรและในลักษณะใดมันจะดีกว่าหรือแย่กว่าการฉีด 'vanilla' แบบพึ่งพา แก้ไข: ฉันต้องการเพิ่มคำถาม: คุณเคยเห็นโครงการ 'ระดับมืออาชีพ' ที่ทำ DI ด้วยตนเองโดยไม่มีกรอบหรือไม่

10
วิธีที่เหมาะสมในการจำลองกิจกรรมในโลกแห่งความเป็นจริงที่ดูเหมือนจะต้องการการอ้างอิงแบบวงกลมใน OOP
ฉันต่อสู้กับปัญหาในโครงการ Java เกี่ยวกับการอ้างอิงแบบวงกลม ฉันพยายามจำลองสถานการณ์ในโลกแห่งความเป็นจริงซึ่งดูเหมือนว่าวัตถุที่เป็นปัญหานั้นมีความเป็นอิสระและจำเป็นต้องรู้ซึ่งกันและกัน โครงการนี้เป็นรูปแบบทั่วไปของการเล่นเกมกระดาน คลาสพื้นฐานนั้นไม่ใช่แบบเฉพาะเจาะจง แต่ขยายออกไปเพื่อจัดการกับข้อมูลเฉพาะของหมากรุกแบ็คแกมมอนและเกมอื่น ๆ ฉันเขียนโค้ดนี้เป็นแอปเพล็ตเมื่อ 11 ปีที่แล้วกับเกมที่แตกต่างกันครึ่งโหล แต่ปัญหาคือมันเต็มไปด้วยการอ้างอิงแบบวงกลม ฉันนำมันกลับมาแล้วโดยการบรรจุคลาสที่เกี่ยวพันทั้งหมดไว้ในไฟล์ต้นฉบับเดียว แต่ฉันเข้าใจว่ามันเป็นรูปแบบที่ไม่ดีใน Java ตอนนี้ฉันต้องการใช้สิ่งที่คล้ายกันเป็นแอพ Android และฉันต้องการทำสิ่งที่ถูกต้อง ชั้นเรียนคือ: RuleBook: วัตถุที่สามารถสอบปากคำสำหรับสิ่งต่างๆเช่นเค้าโครงเริ่มต้นของคณะกรรมการข้อมูลเกมเริ่มต้นอื่น ๆ เช่นใครเป็นคนแรกที่ย้ายการเคลื่อนไหวที่มีอยู่สิ่งที่เกิดขึ้นกับรัฐเกมหลังจากการย้ายเสนอและการประเมินผลของ ตำแหน่งคณะกรรมการปัจจุบันหรือที่เสนอ บอร์ด: การแสดงบอร์ดเกมอย่างง่ายซึ่งสามารถสั่งให้สะท้อนการเคลื่อนไหวได้ MoveList: รายการ Moves นี่คือจุดประสงค์คู่: ตัวเลือกการเคลื่อนไหวที่มีให้ ณ จุดที่กำหนดหรือรายการการเคลื่อนไหวที่เกิดขึ้นในเกม มันอาจแบ่งออกเป็นสองคลาสใกล้เคียงกัน แต่นั่นไม่เกี่ยวข้องกับคำถามที่ฉันถามและอาจทำให้ซับซ้อนขึ้นอีก ย้าย: ย้ายเพียงครั้งเดียว มันรวมทุกอย่างเกี่ยวกับการเคลื่อนไหวเป็นรายการของอะตอม: หยิบชิ้นส่วนจากที่นี่วางไว้ที่นั่นเอาชิ้นส่วนที่ถูกจับออกจากที่นั่น สถานะ: ข้อมูลสถานะเต็มของเกมที่กำลังดำเนินการ ไม่เพียง แต่ตำแหน่ง Board เท่านั้น แต่เป็น MoveList และข้อมูลสถานะอื่น ๆ เช่นใครจะย้ายได้ …

6
ทำไมทีมที่ LMAX ใช้จาวาและออกแบบสถาปัตยกรรมเพื่อหลีกเลี่ยง GC ในทุกกรณี?
ทำไมทีมที่ LMAX จึงออกแบบLMAX Disruptorใน Java แต่ทุกจุดของการออกแบบเพื่อลดการใช้งาน GC หากไม่มีใครต้องการให้ GC ทำงานแล้วทำไมต้องใช้ภาษาที่รวบรวมขยะ? การเพิ่มประสิทธิภาพระดับความรู้ด้านฮาร์ดแวร์และความคิดของพวกเขานั้นยอดเยี่ยม แต่ทำไม Java ฉันไม่ได้ต่อต้าน Java หรืออะไร แต่ทำไมเป็นภาษา GC ทำไมไม่ใช้สิ่งที่ต้องการ D หรือภาษาอื่นที่ไม่มี GC แต่ให้โค้ดที่มีประสิทธิภาพ? เป็นทีมที่คุ้นเคยกับ Java มากที่สุดหรือ Java นั้นมีข้อได้เปรียบที่ไม่เหมือนใครหรือไม่? สมมติว่าพวกเขาพัฒนาโดยใช้ D พร้อมการจัดการหน่วยความจำด้วยตนเองสิ่งที่แตกต่างกันคืออะไร พวกเขาจะต้องคิดในระดับต่ำ (ซึ่งพวกเขาเป็นอยู่แล้ว) แต่พวกเขาสามารถบีบประสิทธิภาพที่ดีที่สุดออกมาจากระบบเหมือนเป็นเจ้าของภาษา

6
ทำไมจึงไม่ใช้จาวาเป็นภาษาสำหรับสร้าง?
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ หาก Java เป็นภาษาที่ใช้โดยทั่วไปและการสร้างโปรแกรมเป็นสิ่งที่สามารถอธิบายได้โดยใช้ภาษา Java ทำไมจึงไม่ใช่วิธีที่ดีที่สุดในการเขียนไฟล์บิลด์และเราใช้เครื่องมือเช่น Ant, Maven และ Gradle แทน มันจะไม่ตรงไปตรงมามากกว่านี้และยังไม่จำเป็นต้องเรียนรู้ภาษาการเขียนโปรแกรมอีกด้วย (BTW - คำถามนี้สามารถใช้ได้กับภาษาอื่นเช่น C #)
24 java  c#  builds  build-system 

3
โรงงานคงเทียบกับโรงงานเป็นซิงเกิล
ในบางรหัสของฉันฉันมีโรงงานแบบคงที่เช่นนี้: public class SomeFactory { // Static class private SomeFactory() {...} public static Foo createFoo() {...} public static Foo createFooerFoo() {...} } ในระหว่างการตรวจสอบรหัสมันก็เสนอว่าควรจะเป็นซิงเกิลตันและฉีด ดังนั้นควรมีลักษณะดังนี้: public class SomeFactory { public SomeFactory() {} public Foo createFoo() {...} public Foo createFooerFoo() {...} } บางสิ่งที่ควรเน้น: โรงงานทั้งสองไร้สัญชาติ ข้อแตกต่างระหว่างเมธอดคือขอบเขต (อินสแตนซ์ vs คงที่) การใช้งานเหมือนกัน Foo เป็นถั่วที่ไม่มีส่วนต่อประสาน ข้อโต้แย้งที่ฉันได้รับจากการคงที่คือ: …

5
วิธีที่ดีที่สุดในการโหลดการตั้งค่าแอปพลิเคชัน
วิธีง่าย ๆ ในการรักษาการตั้งค่าของแอปพลิเคชัน Java จะถูกแสดงด้วยไฟล์ข้อความที่มีนามสกุล ".properties" ที่มีตัวระบุของแต่ละการตั้งค่าที่เกี่ยวข้องกับค่าเฉพาะ (ค่านี้อาจเป็นตัวเลขสตริงวันที่ ฯลฯ ) . C # ใช้วิธีการที่คล้ายกัน แต่ไฟล์ข้อความจะต้องมีชื่อว่า "App.config" ในทั้งสองกรณีในซอร์สโค้ดคุณต้องเริ่มต้นคลาสเฉพาะสำหรับการอ่านการตั้งค่า: คลาสนี้มีวิธีการส่งคืนค่า (เป็นสตริง) ที่เกี่ยวข้องกับตัวระบุการตั้งค่าที่ระบุ // Java example Properties config = new Properties(); config.load(...); String valueStr = config.getProperty("listening-port"); // ... // C# example NameValueCollection setting = ConfigurationManager.AppSettings; string valueStr = setting["listening-port"]; // ... ในทั้งสองกรณีเราควรแยกสตริงที่โหลดจากไฟล์การกำหนดค่าและกำหนดค่าที่แปลงให้กับวัตถุที่พิมพ์ที่เกี่ยวข้อง (ข้อผิดพลาดในการแยกวิเคราะห์อาจเกิดขึ้นในช่วงนี้) …

5
ตัวดำเนินการอินสแตนซ์ Java ของการพิจารณาการสะท้อนและสิ่งที่กำหนดสะท้อน?
ฉันได้พูดคุยกับเพื่อนร่วมงานในวันนี้ไม่ว่าการใช้งานตัวดำเนินการ Java instanceofนั้นเป็นสิ่งที่สะท้อนออกมาหรือไม่ และการอภิปรายพัฒนาอย่างรวดเร็วในสิ่งที่กำหนดสะท้อน ดังนั้นคำจำกัดความของการสะท้อนคืออะไร? และการใช้งานของการinstanceofพิจารณา "ใช้การสะท้อน" คืออะไร? และนอกจากนี้หากinstanceofพิจารณาว่าเป็นเงาสะท้อนแล้วความหลากหลายนั้นก็ไม่ "ใช้การสะท้อน" เช่นกัน? ถ้าไม่ต่างกันคืออะไร

7
Python Productivity VS Java Productivity
ฉันได้พบกับคำถามเกี่ยวกับแพลตฟอร์มที่ Java หรือ Python ดีที่สุดสำหรับการพัฒนาบน Google AppEngine หลายคนกำลังอวดประสิทธิภาพที่เพิ่มขึ้นจากการใช้ Python ผ่าน Java สิ่งหนึ่งที่ฉันจะพูดเกี่ยวกับอาร์กิวเมนต์การผลิต Python vs Java คือ Java มี IDE ที่ยอดเยี่ยมในการเร่งความเร็วในการพัฒนาเนื่องจาก Python ขาดในพื้นที่นี้เนื่องจากธรรมชาติที่เปลี่ยนแปลง ดังนั้นถึงแม้ว่าฉันจะชอบใช้ Python เป็นภาษา แต่ฉันไม่เชื่อว่ามันจะช่วยเพิ่มประสิทธิภาพการทำงานได้มากเมื่อเทียบกับ Java โดยเฉพาะเมื่อใช้เฟรมเวิร์กใหม่ เห็นได้ชัดว่ามันเป็น Java vs Python และเครื่องมือแก้ไขเดียวที่คุณสามารถใช้ได้คือ VIM ดังนั้น Python จะเพิ่มประสิทธิภาพการทำงานให้คุณอย่างมาก แต่เมื่อ IDE ถูกนำเข้ามาในสมการ ฉันคิดว่าข้อดีของ Java นั้นมักจะถูกประเมินในระดับภาษาและมักจะเกิดจากข้อสันนิษฐานที่ล้าสมัย แต่ Java มีประโยชน์มากมายภายนอกตัวภาษาเองเช่น JVM (มักถูกวิพากษ์วิจารณ์ แต่มีศักยภาพมาก), IDE …

1
เหตุใด Java จึงออกมาพร้อมกับความสำเร็จหลังจากข้อยกเว้นที่ไม่ได้ตรวจสอบ
เมื่อใดก็ตามที่โปรแกรม Perl, Python, C ++ หรือ Tcl หยุดทำงานโดยมีข้อยกเว้นที่ไม่สามารถจัดการได้ runtimes ภาษาเหล่านั้นจะลงทะเบียนรหัสทางออกที่ไม่เป็นศูนย์สำหรับกระบวนการ แม้แต่โปรแกรมที่ใช้ Eclipse ก็จะคืนค่า 1 หากมันล้มเหลวระหว่างการเริ่มต้น อย่างไรก็ตามโปรแกรมที่ดำเนินการตามมาตรฐานจะjava.exeกลับเป็นศูนย์อย่างมีความสุขไม่ว่าโปรแกรมจะจบลงอย่างกระทันหันเว้นแต่ว่าโปรแกรมนั้นเรียกใช้System.exit()ด้วยค่าการออก แม้กระทั่งAssertionFailedErrorหรือUnsatisfiedLinkErrorถูกรายงานกลับไปยังโปรแกรมการโทรให้ออกมาเป็นผลสำเร็จ แน่นอนว่าไม่ใช่ทุกระบบที่มีรหัสส่งคืนโปรแกรม แต่ Unix และ Windows มีความสำคัญพอที่จะรับประกันjava.lang.Process.exitValue()กระบวนการลูก พวกเขาไม่รับประกันการเคารพแบบแผนสำหรับกระบวนการหลักหรือไม่ นี่เป็นข้อบกพร่องในการออกแบบภาษาหรือในการนำไปใช้หรือไม่? มีข้อโต้แย้งว่าเป็นความคิดที่ดีหรือไม่?
24 java  exceptions 

4
นักพัฒนาควรรู้อัลกอริทึมและโครงสร้างข้อมูลใดบ้าง [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการ4 ปีที่แล้ว ฉันต้องการเป็นนักพัฒนา Java องค์กรที่ประสบความสำเร็จ อัลกอริทึมและโครงสร้างข้อมูลใดที่ฉันควรมีประสบการณ์ คุณจะแนะนำหนังสืออะไรให้ฉัน ในการเป็นผู้พัฒนา Java ที่ประสบความสำเร็จฉันจำเป็นต้องรู้อัลกอริธึมขั้นสูงทั้งหมดเช่นที่ได้รับในCLRSหรือไม่? คุณสามารถแนะนำรายการหัวข้อที่ฉันควรเรียนรู้ตามลำดับจากมากไปน้อย ฉันต้องรู้ไหม: ที่ไหน? เรียงลำดับ? กราฟ / ต้นไม้? etc?

2
ทำไมตัวสร้างควรเป็นคลาสภายในแทนที่จะเป็นไฟล์คลาสของตัวเอง
Builder Patternตัวอย่างมากมายทำให้Builderคลาสภายในของวัตถุที่สร้างขึ้น ทำให้รู้สึกบางอย่างเพราะมันบ่งบอกถึงสิ่งที่Builderสร้าง อย่างไรก็ตามในภาษาที่พิมพ์แบบคงที่เรารู้ว่าสิ่งที่Builderสร้าง ในทางตรงกันข้ามถ้าBuilderเป็นระดับชั้นที่คุณควรจะรู้ว่าสิ่งที่ชั้นสร้างโดยไม่ได้มองภายในของBuilderBuilder นอกจากนี้การมีตัวสร้างเป็นคลาสภายในจะลดจำนวนของการนำเข้าเนื่องจากสามารถอ้างอิงโดยคลาสภายนอก - หากคุณสนใจสิ่งนั้น แล้วมีตัวอย่างการปฏิบัติที่Builderอยู่ในแพคเกจเดียวกัน StringBuilderแต่ไม่ได้เป็นระดับชั้นเช่น คุณรู้ว่าBuilder ควรสร้างStringเพราะมันมีชื่อดังนั้น ที่ถูกกล่าวว่าเหตุผลที่ดีเท่านั้นที่ฉันสามารถคิดในการสร้างBuilderชั้นในคือคุณรู้ว่าสิ่งที่ชั้น ' Builderคือโดยไม่ทราบชื่อของมันหรืออาศัยการประชุมการตั้งชื่อ ตัวอย่างเช่นถ้าStringBuilderเป็นชั้นในของStringฉันอาจจะรู้ว่ามันมีอยู่เร็วกว่าที่ฉันทำ (เก็งกำไร) มีเหตุผลอื่นที่จะทำให้Builderชั้นในหรือไม่เพียงแค่ลงไปที่การตั้งค่าและพิธีกรรม?

6
ควรกำหนดค่าคงที่สตริงถ้าจะใช้เพียงครั้งเดียวหรือไม่
เรากำลังใช้งานอะแดปเตอร์สำหรับ Jaxen (ไลบรารี XPath สำหรับ Java) ที่ช่วยให้เราใช้ XPath เพื่อเข้าถึงโมเดลข้อมูลของแอปพลิเคชันของเรา สิ่งนี้ทำได้โดยการใช้คลาสที่จับคู่สตริง (ส่งถึงเราจาก Jaxen) ไปยังองค์ประกอบของโมเดลข้อมูลของเรา เราประเมินว่าเราต้องการประมาณ 100 คลาสโดยมีการเปรียบเทียบสตริงมากกว่า 1,000 รายการ ฉันคิดว่าวิธีที่ดีที่สุดในการทำเช่นนี้คือง่ายถ้าคำสั่ง / else พร้อมสตริงที่เขียนลงในโค้ดโดยตรงแทนที่จะกำหนดแต่ละสตริงเป็นค่าคงที่ ตัวอย่างเช่น: public Object getNode(String name) { if ("name".equals(name)) { return contact.getFullName(); } else if ("title".equals(name)) { return contact.getTitle(); } else if ("first_name".equals(name)) { return contact.getFirstName(); } else if …

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