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

Java เป็นภาษาการเขียนโปรแกรมระดับสูงที่เป็นที่นิยม ใช้แท็กนี้เมื่อคุณมีปัญหาในการใช้หรือทำความเข้าใจภาษานั้น ๆ แท็กนี้ไม่ค่อยได้ใช้คนเดียวและมักใช้ร่วมกับ [สปริง], [สปริงบูต], [jakarta-ee], [android], [javafx], [gradle] และ [maven]

8
รูปแบบวันที่นี้คืออะไร 2011-08-12T20: 17: 46.384Z
ฉันมีวันที่ดังต่อไปนี้: 2011-08-12T20:17:46.384Z. รูปแบบนี้คืออะไร ฉันพยายามแยกวิเคราะห์ด้วย Java 1.4 ผ่านทางDateFormat.getDateInstance().parse(dateStr)และฉันจะได้รับ java.text.ParseException: วันที่ไม่สามารถค้นหา: "2011-08-12T20: 17: 46.384Z" ฉันคิดว่าฉันควรใช้SimpleDateFormatสำหรับการวิเคราะห์คำ แต่ฉันต้องรู้สตริงรูปแบบก่อน ทั้งหมดที่ฉันมีคือจนถึงตอนนี้yyyy-MM-ddเพราะฉันไม่รู้ความTหมายในสตริงนี้ - บางสิ่งเกี่ยวข้องกับเขตเวลา สตริงวันนี้จะมาจากlcmis:downloadedOnแท็กที่แสดงบนไฟล์ CMIS ประเภทสื่อดาวน์โหลดประวัติศาสตร์

6
โมดูล Maven + การสร้างโมดูลเฉพาะ
ฉันมีหลายโมดูลโครงการ Maven กับโครงการผู้ปกครองPและสามโมดูลย่อยA, และB Cทั้งสองBและเป็นโครงการสงครามและทั้งสองจะขึ้นอยู่กับ CA ฉันสามารถพิมพ์mvn compileในPและมีทั้งหมดของโมดูลย่อยรวบรวมอย่างถูกต้อง ปัญหามาเมื่อฉันต้องการดำเนินการสำหรับโมดูลเฉพาะ ฉันต้องการที่จะสามารถจัดแพคเกจสงครามสำหรับโครงการBแต่เมื่อฉันเรียกใช้คำสั่งแพคเกจจากBไดเรกทอรี 's Aก็บ่นว่าไม่สามารถหาอ้างอิงสำหรับ ฉันเข้าใจจากคำถามนี้: Maven และโมดูลที่ขึ้นต่อกันซึ่งบางที Maven ไม่ได้ออกแบบมาสำหรับการแก้ปัญหาการพึ่งพาประเภทนี้ แต่ที่ถามว่าฉันจะจัดแพคเกจได้Bอย่างไร ฉันต้องเรียกใช้mvn packageลำดับชั้นโครงการทั้งหมดเมื่อฉันต้องการจริงๆBหรือไม่? ฉันต้องติดตั้งสแนปชอตของ A ลงในที่เก็บข้อมูลโลคัลของฉันทุกครั้งที่ต้องการแพ็กเกจBหรือไม่ สถานการณ์ที่สองนี้ไม่สนุกมากเมื่อAยังอยู่ในระหว่างการพัฒนา แนวทางปฏิบัติที่ดีที่สุดที่นี่?

8
แทนที่อักขระที่ดัชนีเฉพาะในสตริงหรือไม่
ฉันพยายามแทนที่ตัวละครที่ดัชนีเฉพาะในสตริง สิ่งที่ฉันทำคือ: String myName = "domanokz"; myName.charAt(4) = 'x'; สิ่งนี้ทำให้เกิดข้อผิดพลาด มีวิธีการทำเช่นนี้?

13
วิธีการแยกซับสตริงโดยใช้ regex
ฉันมีสตริงที่มีสองคำพูดเดียวในนั้น'ตัวละคร ในระหว่างเครื่องหมายคำพูดเดี่ยวคือข้อมูลที่ฉันต้องการ ฉันจะเขียน regex เพื่อแยก "ข้อมูลที่ฉันต้องการ" จากข้อความต่อไปนี้ได้อย่างไร mydata = "some string with 'the data i want' inside";

22
มีวิธีรัดกุมในการวนซ้ำกระแสกับดัชนีใน Java 8 หรือไม่?
มีวิธีรัดกุมในการวนซ้ำสตรีมในขณะที่สามารถเข้าถึงดัชนีในสตรีมได้หรือไม่ String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"}; List<String> nameList; Stream<Integer> indices = intRange(1, names.length).boxed(); nameList = zip(indices, stream(names), SimpleEntry::new) .filter(e -> e.getValue().length() <= e.getKey()) .map(Entry::getValue) .collect(toList()); ซึ่งดูเหมือนว่าค่อนข้างน่าผิดหวังเมื่อเทียบกับตัวอย่างของ LINQ ที่ให้ไว้ string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" }; var nameList = names.Where((c, index) => c.Length <= index + …
382 java  java-8  java-stream 

19
วิธีการแปลง int [] เป็น List <Integer> ใน Java
ฉันจะแปลงint[]เป็นList&lt;Integer&gt;Java ได้อย่างไร แน่นอนฉันสนใจคำตอบอื่นที่ไม่ใช่การวนซ้ำเรียงตามข้อ แต่ถ้าไม่มีคำตอบอื่นฉันจะเลือกอันนั้นให้ดีที่สุดเพื่อแสดงความจริงว่าฟังก์ชั่นนี้ไม่ได้เป็นส่วนหนึ่งของ Java

25
ลบไดเรกทอรีซ้ำใน Java
มีวิธีการลบไดเรกทอรีทั้งหมดซ้ำใน Java? ในกรณีปกติเป็นไปได้ที่จะลบไดเรกทอรีว่าง อย่างไรก็ตามเมื่อมันมาถึงการลบไดเรกทอรีทั้งหมดที่มีเนื้อหามันไม่ง่ายอีกต่อไป คุณจะลบไดเรกทอรีทั้งหมดที่มีเนื้อหาใน Java ได้อย่างไร

12
เหตุใดฉันจึงควรใช้คำว่า“ final” บนพารามิเตอร์ method ใน Java?
ฉันไม่เข้าใจว่าfinalคำหลักนั้นมีประโยชน์จริง ๆเมื่อใช้กับพารามิเตอร์ของวิธี ถ้าเราไม่รวมการใช้คลาสที่ไม่ระบุชื่อการอ่านและการประกาศเจตนานั้นดูเหมือนว่าจะไร้ค่าสำหรับฉัน การบังคับใช้ว่าข้อมูลบางอย่างยังคงไม่คงที่เท่าที่ควร หากพารามิเตอร์เป็นแบบดั้งเดิมมันจะไม่มีผลกระทบเนื่องจากพารามิเตอร์ถูกส่งผ่านไปยังวิธีการเป็นค่าและการเปลี่ยนแปลงมันจะไม่มีผลนอกขอบเขต หากเราส่งพารามิเตอร์โดยการอ้างอิงตัวอ้างอิงเองนั้นเป็นตัวแปรในตัวเครื่องและหากการอ้างอิงนั้นเปลี่ยนจากภายในเมธอดนั่นจะไม่มีผลกระทบใด ๆ จากภายนอกขอบเขตของเมธอด ลองพิจารณาตัวอย่างทดสอบง่ายๆด้านล่าง การทดสอบนี้ผ่านแม้ว่าวิธีการจะเปลี่ยนค่าของการอ้างอิงที่ให้ แต่ก็ไม่มีผลใด ๆ public void testNullify() { Collection&lt;Integer&gt; c = new ArrayList&lt;Integer&gt;(); nullify(c); assertNotNull(c); final Collection&lt;Integer&gt; c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection&lt;Integer&gt; c) { c = new ArrayList&lt;Integer&gt;(); } public void nullify(Collection&lt;?&gt; t) { t = null; …

7
เมธอดมีการลบแบบเดียวกับเมธอดชนิดอื่น
ทำไมมันไม่ถูกกฎหมายที่จะมีสองวิธีต่อไปนี้ในชั้นเรียนเดียวกัน class Test{ void add(Set&lt;Integer&gt; ii){} void add(Set&lt;String&gt; ss){} } ฉันได้รับ compilation error วิธีการเพิ่ม (ชุด) มีการเพิ่มการลบเช่นเดียวกับชุดวิธีการอื่นในการทดสอบประเภท ในขณะที่ฉันสามารถหลีกเลี่ยงได้ฉันก็สงสัยว่าทำไม javac ไม่ชอบสิ่งนี้ ฉันเห็นได้ว่าในหลาย ๆ กรณีตรรกะของทั้งสองวิธีนั้นจะคล้ายกันมากและอาจถูกแทนที่ด้วยวิธีเดียว public void add(Set&lt;?&gt; set){} วิธีการ แต่นี่ไม่ใช่กรณี นี่เป็นเรื่องที่น่ารำคาญเป็นพิเศษหากคุณต้องการมีสองอันconstructorsที่ขัดแย้งกันเพราะคุณไม่สามารถเปลี่ยนชื่อของหนึ่งในconstructorsนั้นได้
381 java  generics 

22
หลีกเลี่ยงการซิงโครไนซ์ (นี่) ใน Java หรือไม่
เมื่อใดก็ตามที่มีคำถามปรากฏขึ้นบน SO เกี่ยวกับการซิงโครไนซ์ Java บางคนมีความกระตือรือร้นที่จะชี้ให้เห็นว่าsynchronized(this)ควรหลีกเลี่ยง แต่พวกเขาอ้างว่าต้องการล็อคตัวอ้างอิงส่วนตัวแทน เหตุผลบางประการที่กำหนดคือ: รหัสความชั่วร้ายบางอย่างอาจขโมยล็อคของคุณ (เป็นที่นิยมมากรหัสนี้มีตัวแปร "โดยไม่ตั้งใจ") วิธีการทำข้อมูลให้ตรงกันทั้งหมดภายในชั้นเดียวกันใช้ล็อคเดียวกันแน่นอนซึ่งช่วยลดปริมาณงาน คุณกำลังเปิดเผยข้อมูลมากเกินไปโดยไม่จำเป็น คนอื่นรวมถึงฉันเถียงว่าsynchronized(this)เป็นสำนวนที่ใช้บ่อยๆ (เช่นในห้องสมุด Java) มีความปลอดภัยและเข้าใจดี ไม่ควรหลีกเลี่ยงเพราะคุณมีข้อผิดพลาดและคุณไม่รู้ว่าเกิดอะไรขึ้นในโปรแกรมแบบมัลติเธรดของคุณ กล่าวอีกนัยหนึ่ง: ถ้ามันใช้ได้แล้วใช้มัน ฉันสนใจที่จะเห็นตัวอย่างในโลกแห่งความเป็นจริง (ไม่มีสิ่งใดสำหรับ foobar) ที่หลีกเลี่ยงการล็อกบนthisจะดีกว่าเมื่อsynchronized(this)จะทำงาน ดังนั้น: คุณควรหลีกเลี่ยงsynchronized(this)และแทนที่ด้วยล็อคในการอ้างอิงส่วนตัวหรือไม่? ข้อมูลเพิ่มเติมบางส่วน (อัปเดตเมื่อได้รับคำตอบแล้ว): เรากำลังพูดถึงการประสานอินสแตนซ์ ทั้งโดยนัย ( synchronizedวิธีการ) และรูปแบบที่ชัดเจนในการsynchronized(this)ได้รับการพิจารณา หากคุณอ้างถึง Bloch หรือหน่วยงานอื่น ๆ ในเรื่องนี้อย่าปล่อยชิ้นส่วนที่คุณไม่ชอบ (เช่น Java ที่มีประสิทธิภาพ, รายการเกี่ยวกับความปลอดภัยของกระทู้: โดยปกติแล้วมันจะล็อคตัวอินสแตนซ์เอง แต่มีข้อยกเว้น) หากคุณต้องการความละเอียดในการล็อคอื่น ๆ นอกเหนือจากข้อsynchronized(this)เสนอsynchronized(this)มันจะไม่สามารถใช้ได้ดังนั้นจึงไม่ใช่ปัญหา

25
วิธีการรอให้เธรดทั้งหมดเสร็จสิ้นโดยใช้ ExecutorService
ฉันต้องทำงานบางอย่างทีละ 4 อย่างเช่นนี้: ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } //...wait for completion somehow ฉันจะได้รับการแจ้งเตือนได้อย่างไรเมื่อทั้งหมดเสร็จสมบูรณ์ สำหรับตอนนี้ฉันไม่สามารถคิดอะไรได้ดีไปกว่าการตั้งตัวนับโกลบอลบางตัวและลดมันลงที่ส่วนท้ายของทุกภารกิจ หรือรับรายการ Futures และใน infinite loop monitor isDone สำหรับพวกเขาทั้งหมด อะไรคือวิธีแก้ปัญหาที่ดีกว่าที่ไม่เกี่ยวข้องกับการวนซ้ำไม่สิ้นสุด? ขอบคุณ

11
@Resource กับ @Autowired
ซึ่งคำอธิบายประกอบ@Resource ( jsr250 ) หรือ@Autowired (ฤดูใบไม้ผลิที่เฉพาะเจาะจง) ผมควรจะใช้ในการ DI? ฉันใช้งานได้สำเร็จทั้งในอดีต@Resource(name="blah")และ@Autowired @Qualifier("blah") สัญชาตญาณของฉันคือติดกับ@Resourceแท็กเนื่องจากมันได้รับการยอมรับจากคน jsr ใครมีความคิดที่แข็งแกร่งในเรื่องนี้?

10
System.currentTimeMillis กับ System.nanoTime
Vs ความแม่นยำ ความแม่นยำ สิ่งที่ฉันอยากรู้คือฉันควรใช้System.currentTimeMillis ()หรือSystem.nanoTime ()เมื่ออัปเดตตำแหน่งของวัตถุในเกมหรือไม่ การเปลี่ยนแปลงในการเคลื่อนไหวของพวกเขาเป็นสัดส่วนโดยตรงกับเวลาที่ผ่านไปนับตั้งแต่การโทรครั้งสุดท้ายและฉันต้องการให้แม่นยำที่สุดเท่าที่จะทำได้ ฉันได้อ่านแล้วว่ามีปัญหาการแก้ไขเวลาที่ร้ายแรงระหว่างระบบปฏิบัติการที่แตกต่างกัน (เช่น Mac / Linux มีความละเอียดเกือบ 1 ms ในขณะที่ Windows มีความละเอียด 50ms หรือไม่) ฉันทำงานแอพของฉันบน Windows เป็นหลักและความละเอียด 50ms ดูไม่ถูกต้อง มีตัวเลือกที่ดีกว่าสองอย่างที่ฉันระบุไว้หรือไม่ ข้อเสนอแนะ / ความคิดเห็นใด ๆ

26
Java: แจ้งเตือน () เทียบกับ alertAll () อีกครั้ง
ตั้งค่าใหม่ให้กับStack Overflow ที่ว่างอยู่แล้ว : แจ้งให้ทราบ, แจ้งเตือนทั้งหมด? หากหนึ่ง Google สำหรับ "ความแตกต่างระหว่างnotify()และnotifyAll()" คำอธิบายมากมายจะปรากฏขึ้น (แยกย่อหน้า javadoc) ทั้งหมดนี้ทำให้จำนวนเธรดที่รอรับการปลุกเพิ่มขึ้นหนึ่งครั้งnotify()และnotifyAll()ต่อเนื่อง อย่างไรก็ตาม (ถ้าฉันเข้าใจความแตกต่างระหว่างวิธีการเหล่านี้ถูกต้อง) มีเพียงหนึ่งเธรดเท่านั้นที่ถูกเลือกสำหรับการได้รับการตรวจสอบเพิ่มเติมเสมอ ในกรณีแรกรายการที่เลือกโดย VM ในกรณีที่สองรายการที่เลือกโดยตัวกำหนดเวลาระบบเธรด ขั้นตอนการเลือกที่แน่นอนสำหรับทั้งคู่ (ในกรณีทั่วไป) ไม่เป็นที่รู้จักสำหรับโปรแกรมเมอร์ สิ่งที่มีประโยชน์แตกต่างระหว่างการแจ้ง ()และnotifyAll ()แล้ว? ฉันพลาดอะไรไปรึเปล่า?


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