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

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

2
คุณจำเป็นต้องรู้ Java ก่อนที่จะลอง Scala
ฉันสนใจเรียนรู้สกาล่า ฉันอ่านมากเกี่ยวกับเรื่องนี้ แต่หลายคนให้ความสำคัญกับมันเพราะมันมีรูปแบบนักแสดงที่ดีกว่าสำหรับการเกิดพร้อมกันมันจัดการ xml ด้วยวิธีที่ดีกว่ามากแก้ปัญหาของฟังก์ชั่นชั้นหนึ่ง คำถามของฉันคือคุณต้องรู้จัก Java เพื่อทำความเข้าใจ / ชื่นชมวิธีการทำงานของ Scala? จะเป็นการดีกว่าถ้าคุณใช้การแทงที่ Java ก่อนจากนั้นลองใช้ Scala หรือคุณสามารถเริ่มต้น Scala โดยที่ไม่มี backround ของ Java อย่างแน่นอน
15 java  scala 

2
(Dis-) ข้อดีของการพิมพ์โครงสร้าง
ผมเคยดูเพียงแค่การพูดคุยนี้โดยแดเนียล Spiewakที่เขาพูดเกี่ยวกับข้อดีของการพิมพ์โครงสร้างเมื่อเทียบกับสกาล่าของ ans ของ Java พิมพ์เล็กน้อย ตัวอย่างหนึ่งสำหรับความแตกต่างนี้จะเป็นรหัส Java ต่อไปนี้ public interface Foo { public int length(); } public interface Bar { public int length(); } Foo f = ...; Bar b = f; ซึ่งแน่นอนว่าจะไม่รวบรวมเพราะความเข้ากันได้ระหว่างประเภทFooและBarจะถูกกำหนดโดยชื่อ ระบบประเภทโครงสร้างในอีกด้านหนึ่งสามารถประกาศว่าทั้งสองประเภทมีความเท่าเทียมกันหรือเข้ากันได้และดังนั้นในกรณีอื่น ๆ อนุญาตให้มีการตรวจสอบการพิมพ์เป็ด ตอนนี้ฉันคิดว่าฉันเข้าใจถึงข้อดีของระบบโครงสร้างแบบส่วนใหญ่แล้ว แต่ฉันสงสัยว่ามันจะไม่ทำให้ความปลอดภัยของประเภทจากตัวอย่างเช่นต่อไปนี้เป็นโมฆะ class Foo { class Bar { /* ... */ } def …

1
ความมุ่งมั่นของออราเคิลต่อ Java คืออะไร? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เราลงทุนอย่างหนักใน Java แต่หลังจากประสบการณ์ล่าสุดและอ่านคำตอบของ Joonas สำหรับคำถามนั้น: หากคุณใช้การตั้งค่าสถานะเหล่านี้ใน Java 6 คุณอาจประสบปัญหาไม่เพียง แต่ล่ม แต่ยังดำเนินการลูปที่ไม่ถูกต้องนั่นคือการคำนวณผิดเนื่องจากการอัปเกรดเล็กน้อยจาก 6u19 ถึง 6u20 (โดยประมาณ) ... และการโพสต์บล็อกที่เกี่ยวข้องเกี่ยวกับปัญหา Java 7 ที่โดดเด่นทำให้เรากังวลเกี่ยวกับคุณภาพของ Java ที่กำลังดำเนินไป Oracle กำลังแก้ไขปัญหาเหล่านี้หรือไม่ ออราเคิลจัดหาอะไรให้บ้างเพื่อรับรองว่า Java รองรับในอนาคตหรือไม่
15 java  oracle 

5
เมื่อใดที่เหมาะสมที่จะใช้ตัวดำเนินการระดับบิตในนิพจน์เงื่อนไข
ก่อนอื่นมีภูมิหลังบางอย่าง: ฉันเป็นครูฝึกอบรมด้านไอทีและฉันพยายามแนะนำผู้ประกอบการบูลีนของ java กับชั้นเรียนเกรด 10 ของฉัน ครูที่ปรึกษาของฉันตรวจสอบแผ่นงานที่ฉันเตรียมและแสดงความคิดเห็นว่าฉันสามารถให้พวกเขาใช้เพียง & & หรือเดียว เพื่อแสดงโอเปอเรเตอร์เพราะพวกเขา "ทำสิ่งเดียวกัน" ฉันตระหนักถึงความแตกต่างระหว่าง & และ && & เป็นตัวดำเนินการระดับบิตสำหรับใช้ระหว่างจำนวนเต็มเพื่อดำเนินการ "bit-twiddling" && เป็นตัวดำเนินการตามเงื่อนไขที่มีไว้สำหรับใช้ระหว่างค่าบูลีน เพื่อพิสูจน์จุดที่ตัวดำเนินการเหล่านี้ไม่ได้ "ทำสิ่งเดียวกัน" เสมอไปฉันหาตัวอย่างที่ใช้ค่าบิตระหว่างค่าบูลีนจะทำให้เกิดข้อผิดพลาด ฉันพบตัวอย่างนี้ boolean bitwise; boolean conditional; int i=10, j=12; bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3 System.out.println(bitwise+ " "+ i); …

2
Hotswap และทางเลือก?
ตั้งแต่วันแรกของชีวิตในวิทยาลัยของฉันฉันใช้ Java และปัญหาที่ใหญ่ที่สุดที่เรามีคือการผลิตน้อยกว่าภาษาตีความอื่น ๆ ทุกคนมั่นใจว่า java เป็นหนึ่งในภาษาที่รวบรวมดีที่สุด อย่างไรก็ตาม Sun หรือ Oracle ไม่ได้ใช้ความพยายามอย่างเพียงพอในการแก้ปัญหานี้ หนึ่งในปัญหาคือการโหลดคลาสใหม่ ความพยายามล่าสุดจากชุมชนเพื่อแก้ปัญหานี้เป็นโครงการ DaVinci hotswap , JRebel , PlayFramework อย่างไรก็ตามในช่วงเวลาของการเขียนนี้พวกเขายังไม่สุก (IMO) และพื้นเมือง บางคนไม่พร้อมสำหรับองค์กรบางคนไม่สามารถใช้งานร่วมกับ IDE ทั้งหมดได้บางส่วนเป็นโครงการสากลที่ยังไม่บรรลุนิติภาวะ โรดแม็พโรดเดอร์และแม้แต่ผู้พัฒนา Java ที่พร้อมใช้งานแล้ว แต่ชุมชน Java ยังไม่มีวิธีแก้ปัญหาสำหรับการรีโหลดคลาส fly ออราเคิลพยายามอย่างหนักเพื่อแก้ไขปัญหานี้หรือไม่? ทำไมการโหลดคลาสยังไม่ได้รับการใช้งานอย่างเป็นทางการ?
15 java 

8
คุณส่งเสริมองค์กรของคุณให้ย้ายจาก Java เป็น Scala อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา องค์กรของใครเริ่มการโยกย้ายจาก Java ไปยัง Scala หรือไม่? ถ้าใช่คุณจะทำอย่างไร ฉันจะทำอย่างไรเพื่อกระตุ้นให้เพื่อนร่วมงานทำเช่นเดียวกัน
15 java  scala  migration 

1
Collection.stream (). filter (). forEach () ไม่มีประสิทธิภาพเปรียบเทียบกับมาตรฐานสำหรับแต่ละลูปหรือไม่
IntelliJ IDEA แนะนำให้ฉันตอนนี้เพื่อแทนที่ลูปสำหรับแต่ละลูปต่อไปนี้ด้วยการเรียก Java 8 "forEach": for (Object o : objects) { if (o instanceof SomeObject) { doSomething(); } } การโทรที่แนะนำจะเป็นเช่นนี้: objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething()); เว้นแต่ว่าฉันเข้าใจผิดว่าฟังก์ชันการทำงานพื้นฐานของ Stream ทำงานอย่างไรฉันดูเหมือนว่าการใช้ stream เป็นการดำเนินการ O (2n) ซึ่งตรงข้ามกับการดำเนินการ O (n) สำหรับมาตรฐานสำหรับแต่ละลูป

5
หน่วยทดสอบวิธีการโมฆะ
เพื่อแก้ไขข้อผิดพลาดในการประยุกต์ใช้ผมปรับเปลี่ยนวิธีการตั้งชื่อโดยการเพิ่มการเรียกร้องให้เป็นวิธีการที่มีอยู่ชื่อ postLogingetShoppingCart รหัส protected void postLogin() { getShoppingCart(); } อย่างไรก็ตามฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการเขียนบททดสอบpostLoginคืออะไร วิธีที่ 1 ใช้การตรวจสอบจาก Mockito เพียงตรวจสอบว่าวิธีการนั้นถูกเรียก verify(mock).getShoppingCart(); วิธีที่ 2 ทดสอบผลข้างเคียงของการเรียกใช้เมธอดโดยเรียกค่าของตะกร้าสินค้าของผู้ใช้ AssertNotNull(user.getShoppingCart()); วิธีการหนึ่งดีกว่าวิธีอื่นหรือไม่?

3
สถาปัตยกรรมสะอาด - ใช้คลาสของเคสมากเกินไป
ฉันกำลังเข้าสู่Clean Architectureและยกระดับ Android ของฉันจาก MVC เป็นMVPแนะนำ DI กับ Dagger 2, Reactivity with RxJava 2 และแน่นอน Java 8 ในสถาปัตยกรรมที่สะอาด MVPมีเลเยอร์ระหว่างเอนทิตี (ในดาต้าสโตร์) และผู้นำเสนอที่ควรเข้าถึง ชั้นนี้คือ"การใช้กรณี" กรณีการใช้งานเป็นส่วนติดต่อแบบอุดมคติซึ่งใช้การดำเนินการหนึ่งอย่างกับหนึ่งเอนทิตี้ ฉันยังรู้ว่า Clear Architecture " กำลังกรีดร้อง " ในแง่ของโปรเจ็กต์นั้นสามารถอ่านได้สูงมากเนื่องจากมีคลาสจำนวนมากในพวกเขา ตอนนี้อยู่ในโครงการของฉันฉันมีบางอย่างเช่น6 หน่วยงานต่าง ๆและแน่นอนแต่ละพื้นที่เก็บข้อมูลกิจการอย่างน้อย 4 วิธี (มักจะได้รับเพิ่มลบปรับปรุง) เพื่อเข้าถึงพวกเขา .. ดังนั้น 6 * 4 = 24 หากสิ่งที่ฉันเข้าใจจนถึงปัจจุบันของ Clean Architecture ฉันจะมี 24 UseCase …
15 java  android  use-case  mvp 

3
ฉันควรส่งคืนการตอบสนอง 204 หรือ 404 เมื่อไม่พบทรัพยากรหรือไม่
ฉันกำลังพัฒนาบริการ RESTful ที่เรียบง่ายสำหรับทัวร์นาเมนต์และกำหนดเวลา เมื่อมีการสร้างทัวร์นาเมนต์ผ่านคำขอ POST ที่มีเนื้อความ JSON การแข่งขันจะถูกแทรกใน a BiMapประกาศดังต่อไปนี้ในการนำ DAO ไปใช้: private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create()); เมื่อมีการสร้างทัวร์นาเมนต์ id ของสตริงที่เกี่ยวข้องจะถูกส่งคืนเพื่อให้ผู้ใช้สามารถมีการอ้างอิงในอนาคตของทัวร์นาเมนต์นั้น เขา / เธอสามารถรับข้อมูลคืนจากทัวร์นาเมนต์ใหม่ที่ทำตามคำขอต่อไปนี้: GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39 แต่ถ้าหากไม่พบการแข่งขันที่มีรหัสดังกล่าวล่ะ จนถึงตอนนี้ฉันกำลังตอบกลับ 204 ข้อ นิวเจอร์ซีย์กำลังทำเพื่อฉันเมื่อกลับมาnullจากหนึ่งในวิธีการของมัน นี่คือวิธีการที่สอดคล้องกับเส้นทางด้านบน: @Path("/{id}") @GET @Produces(MediaType.APPLICATION_JSON) public Tournament getTournament(@PathParam("id") String id) { Optional<Tournament> optTournament = tournamentDao.getTournament(id); if (optTournament.isPresent()) return optTournament.get(); return …
15 java  rest  web-services  http 

3
คลาส RxJava Flowable ถูกต้องตามกฎหมายสามารถมี 460 วิธีได้หรือไม่?
ฉันเพิ่งเริ่มต้นกับRxJavaการใช้ReactiveXของ Java (หรือที่เรียกว่าRxและReactive Extensions ) สิ่งที่ทำให้ฉันหลงไหลจริงๆคือขนาดที่ใหญ่ของคลาสFlowableของ RxJava : มันมี 460 วิธี! เพื่อความเป็นธรรม: มีวิธีการมากมายที่มากเกินไปซึ่งกระแทกจำนวนวิธีทั้งหมดอย่างมีนัยสำคัญ บางทีคลาสนี้ควรจะถูกทำลาย แต่ความรู้และความเข้าใจของฉันเกี่ยวกับ RxJava มี จำกัด มาก คนที่สร้าง RxJava นั้นฉลาดมากและพวกเขาสามารถเสนอข้อโต้แย้งที่ถูกต้องในการเลือกสร้างFlowableด้วยวิธีการมากมาย ในทางกลับกัน: RxJava เป็นการใช้งาน Java ของส่วนขยายรีแอกทีฟของMicrosoftและนั่นไม่ได้มีคลาสFlowableดังนั้นนี่ไม่ใช่กรณีของการย้ายคลาสที่มีอยู่แบบสุ่มและนำไปใช้ใน Java [ อัปเดต:จุดก่อนหน้าในตัวเอียงไม่ถูกต้องตามจริง: คลาสObservableของ Microsoft ซึ่งมีมากกว่า 400 วิธีใช้เป็นพื้นฐานสำหรับคลาสObservableของ RxJava และFlowableนั้นคล้ายกับObservableแต่จัดการ backpressure สำหรับข้อมูลจำนวนมาก ดังนั้นทีม RxJava จึงย้ายคลาสที่มีอยู่ โพสต์นี้น่าจะท้าทายการออกแบบเดิมของคลาสObservableโดย Microsoft มากกว่าคลาสFlowableของ RxJava ] RxJava อายุน้อยกว่า 3 …

7
ดั้งเดิมเทียบกับคลาสเพื่อแสดงวัตถุโดเมนอย่างง่าย
อะไรคือแนวทางทั่วไปหรือกฎง่ายๆสำหรับเมื่อใช้วัตถุโดเมน speciifc เทียบกับสตริงหรือหมายเลขธรรมดา? ตัวอย่าง: อายุกับจำนวนเต็ม? ชั้น FirstName vs String? UniqueID vs String หมายเลขโทรศัพท์กับสตริงเทียบกับ Long หรือไม่ DomainName คลาส vs String? ฉันคิดว่าผู้ปฏิบัติงาน OOP ส่วนใหญ่จะพูดคลาสที่เฉพาะเจาะจงสำหรับ PhoneNumber และ DomainName กฎเพิ่มเติมเกี่ยวกับสิ่งที่ทำให้พวกเขาถูกต้องและวิธีการเปรียบเทียบทำให้ชั้นเรียนง่าย ๆ ง่ายขึ้นและปลอดภัยยิ่งขึ้นที่จะจัดการกับ แต่สำหรับสามคนแรกนั้นมีการถกเถียงกันมากขึ้น ฉันไม่เคยเจอคลาส "อายุ" แต่เราสามารถโต้แย้งได้ว่ามันสมเหตุสมผลเพราะมันต้องไม่ใช่ลบ (โอเคฉันรู้ว่าคุณสามารถโต้เถียงสำหรับวัยลบได้ แต่มันเป็นตัวอย่างที่ดีที่เกือบเทียบเท่ากับจำนวนเต็มดั้งเดิม) สตริงเป็นเรื่องปกติที่จะแสดง "ชื่อ" แต่มันไม่สมบูรณ์เพราะสตริงที่ว่างเปล่าเป็นสตริงที่ถูกต้อง แต่ไม่ใช่ชื่อที่ถูกต้อง การเปรียบเทียบมักจะทำโดยไม่สนใจขนาดตัวพิมพ์ แน่นอนว่ามีวิธีการตรวจสอบความว่างเปล่าทำการเปรียบเทียบแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่จำเป็นต้องให้ผู้บริโภคทำเช่นนี้ คำตอบนั้นขึ้นอยู่กับสภาพแวดล้อมหรือไม่? ฉันเกี่ยวข้องกับซอฟต์แวร์องค์กร / ซอฟต์แวร์มูลค่าสูงที่จะมีชีวิตอยู่และได้รับการดูแลรักษาเป็นเวลานานกว่าทศวรรษ บางทีฉันอาจจะคิดมากเรื่องนี้ แต่ฉันอยากจะรู้ว่าถ้าใครมีกฎเกณฑ์ว่าเมื่อใดควรเลือกคลาสเทียบกับแบบดั้งเดิม

2
ตอนนี้ไม่ใช่ว่าการประกาศเมธอดทั้งหมดใน Java Interface นั้นเป็นนามธรรมสาธารณะควรจะประกาศเมธอดด้วยตัวดัดแปลงเหล่านี้หรือไม่?
เริ่มต้นด้วย Java 8 defaultมีการนำวิธีการมาใช้ในอินเตอร์เฟส ได้อย่างมีประสิทธิภาพที่นี้หมายถึงว่าไม่ทุกวิธีการในการให้มีinterfaceabstract เริ่มต้นด้วย Java 9 (อาจ) privateวิธีการจะได้รับอนุญาต ซึ่งหมายความว่าไม่ทุกวิธีการในการให้มีinterfacepublic abstract คำถาม "ควรประกาศวิธีการในส่วนต่อประสาน Java โดยมีหรือไม่มีpublicตัวแก้ไขการเข้าถึงหรือไม่" ถูกถามที่ Stack Overflow ที่/programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m คำตอบส่วนใหญ่แย้งว่าpublic abstractไม่ควรใช้เพราะไม่มีวิธีการใดที่interfaceสามารถเป็นอย่างอื่นpublic abstractได้ นี่ไม่ใช่กรณีอีกต่อไป ดังนั้นด้วยคุณสมบัติใหม่ของอินเทอร์เฟซเหล่านี้ควรใช้public abstractคีย์เวิร์ดในการประกาศเมธอดของอินเตอร์เฟส Java หรือไม่? ในสภาพแวดล้อมเฉพาะของฉันเราจะมีคนที่มีประสบการณ์วิศวกรซอฟต์แวร์ แต่ไม่เคยมีประสบการณ์ใน Java อ่านโค้ด Java เป็นครั้งคราว ฉันรู้สึกว่าการละทิ้งpublic abstractคำหลักจะสร้างจุดสับสนเพิ่มเติมสำหรับผู้ที่ไม่คุ้นเคยกับประวัติว่าอินเตอร์เฟสมีกฎแตกต่างกันสำหรับการใช้คำหลักเหล่านี้อย่างไร

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และให้ข้อผิดพลาดที่ดีกว่า แต่นั่นเป็นการเพิ่มโอเวอร์เฮดให้กับโค้ดที่ไม่ใช่บั๊ก

2
ฉันจะอธิบายอย่างไรว่าคลาสนั้นไม่เปลี่ยนรูปใน Java?
เมื่อเร็ว ๆ นี้ฉันได้พบว่าวัตถุที่เปลี่ยนไม่ได้มีประโยชน์อย่างไรและเช่นถ้าคุณส่งองค์ประกอบไปยังตัวสร้างและคลาสของคุณควรจะไม่เปลี่ยนรูปคุณต้องคัดลอกองค์ประกอบเหล่านี้หากพวกเขาไม่เปลี่ยนรูปตัวเอง สิ่งนี้ต้องการการตรวจสอบหรือความรู้มากมายเกี่ยวกับโครงการของฉันเพราะถ้าฉันมี public A(B foo) และBไม่ได้เปลี่ยนรูปฉันต้องคัดลอกA Bตอนนี้จินตนาการBดูเหมือนไม่เปลี่ยนรูป แต่ตัวเองมีคลาสที่ไม่แน่นอนในตัวสร้างและอื่น ๆ มีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดสำหรับการจัดทำเอกสารหรือไม่หากคลาสไม่เปลี่ยนรูปแบบใน Java? ดูเหมือนว่าไม่มี@immutableคำหลักใน Javadoc คำอธิบายประกอบ @Immutableดูเหมือนว่าจะมีบางสิ่งบางอย่างที่แตกต่างกันโดยสิ้นเชิงในการผลิตระดับอัตโนมัติและไม่ได้เป็นส่วนหนึ่งของมาตรฐาน Java

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