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

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

4
อาร์กิวเมนต์จะทำการตรวจสอบไฟล์ไบนารีอีกครั้งใน SCM
ฉันทำงานให้กับ บริษัท ที่สร้างแอปพลิเคชัน Java เป็นหลักและฉันพยายามโน้มน้าวให้ทุกคนหยุดตรวจสอบไฟล์ไบนารี่ (การอ้างอิงและผลิตภัณฑ์ขั้นสุดท้าย) ไปยัง SCM พวกเขารู้ว่ามันเป็นวิธีปฏิบัติที่ไม่ดี แต่พวกเขาคิดว่า "มันใช้งานได้" และมันก็ไม่ได้เป็นปัญหาจริงๆแม้ในขณะที่หลายคนรู้เกี่ยวกับ Maven และเครื่องมืออื่น ๆ สำหรับการสร้างนอกเหนือจาก Ant ทั้งนักเขียนบทละครและโปรแกรมเมอร์ (ประมาณ 50 คน) พร้อมที่จะรับฟังข้อโต้แย้งใด ๆ และยอมรับว่ามันเสียพื้นที่ในการสำรองข้อมูล แต่ฉันต้องการที่จะเชื่ออย่างแท้จริงเพราะการเปลี่ยนนิสัยจะต้องใช้ความพยายามอย่างมาก คุณใช้ข้อโต้แย้งอะไรเพื่อสนับสนุนการเปลี่ยนแปลง แก้ไข:โอเคมันสมเหตุสมผลแล้วที่จะแยกความแตกต่างระหว่างไฟล์ที่แทบจะไม่เปลี่ยนแปลงเช่นการพึ่งพาและการสร้างไฟล์ ถึงอย่างนั้นฉันก็ให้ความสนใจในเหตุผลต่อหลัง
10 java  builds 

2
อินเทอร์เฟซที่มีเพียง getters เป็นกลิ่นรหัส
(ฉันเคยเห็นคำถามนี้แต่คำตอบแรกเป็นเรื่องเกี่ยวกับคุณสมบัติอัตโนมัติมากกว่าเกี่ยวกับการออกแบบและคำตอบที่สองบอกว่าซ่อนรหัสการจัดเก็บข้อมูลจากผู้บริโภคซึ่งฉันไม่แน่ใจว่าเป็นสิ่งที่ฉันต้องการ / รหัสของฉันทำ ดังนั้นฉันต้องการฟังความเห็นอื่น ๆ ) ฉันมีเอนทิตีที่คล้ายกันมากสองรายการHolidayDiscountและRentalDiscountนั่นคือส่วนลดที่มีความยาวเนื่องจาก 'ถ้าอย่างน้อยที่สุดจะnumberOfDaysใช้percentส่วนลดได้' ตารางมี fks ไปยังเอนทิตีพาเรนต์ที่แตกต่างกันและใช้ในสถานที่ต่าง ๆ แต่ที่ที่ใช้จะมีตรรกะทั่วไปเพื่อรับส่วนลดสูงสุดที่เกี่ยวข้อง ตัวอย่างเช่น a HolidayOfferมีจำนวนHolidayDiscountsและเมื่อคำนวณต้นทุนเราต้องหาส่วนลดที่เกี่ยวข้อง RentalDiscountsเหมือนกันสำหรับเช่าและ เนื่องจากตรรกะเหมือนกันฉันต้องการเก็บไว้ในที่เดียว นั่นคือสิ่งที่วิธีต่อไปนี้เพรดิเคตและตัวเปรียบเทียบทำ: Optional<LengthDiscount> getMaxApplicableLengthDiscount(List<LengthDiscount> discounts, int daysToStay) { if (discounts.isEmpty()) { return Optional.empty(); } return discounts.stream() .filter(new DiscountIsApplicablePredicate(daysToStay)) .max(new DiscountMinDaysComparator()); } public class DiscountIsApplicablePredicate implements Predicate<LengthDiscount> { private final long daysToStay; public DiscountIsApplicablePredicate(long …

3
ทำไม java generics ไม่สามารถอยู่ในอาร์เรย์ได้?
ทำไมเมื่อฉันพยายามสร้าง ArrayLists: ArrayList<Integer>[] arr=new ArrayList<Integer>[40];มีข้อผิดพลาดและ java ไม่อนุญาตสิ่งนี้ มีเหตุผลที่เกี่ยวข้องกับการใช้งาน generics ของจาวา, generics ในภาษาใด ๆ หรือบางสิ่งบางอย่างโดยพลการ?

5
OOP: อะไรคือสถานการณ์บางอย่างที่การออกแบบโดยใช้คลาสดีกว่าอินเตอร์เฟสที่ใช้
ผมอ่าน เว็บไซต์ของ JDOM ทำไม JDOM API จึงถูกกำหนดในรูปแบบของคลาสที่เป็นรูปธรรมมากกว่าส่วนต่อประสาน? Jason Hunter สรุปข้อโต้แย้งกับ API ที่ใช้อินเตอร์เฟสสำหรับ JDOM: ด้วยอินเทอร์เฟซทุกอย่างกลายเป็นโรงงานองค์ประกอบจะต้อง 'นำเข้า' ลงในเอกสารใหม่แทนที่จะเพิ่มเพียงอย่างเดียวจึงไม่สามารถรับประกันคุณสมบัติเช่นการทำให้เป็นอนุกรมในระยะยาวและรายการจะดำเนินต่อไป เราเริ่มต้นด้วยอินเตอร์เฟสจริง ๆ แล้ว ในระหว่างการตรวจสอบก่อนเผยแพร่ของเรากับเพื่อนบางคนเราได้รับข้อเสนอแนะเราควรลองคลาสที่เป็นรูปธรรม เราทำและการออกแบบก็ดีกว่ามาก ฉันเป็นนักออกแบบมือใหม่ คำแนะนำทั้งหมดที่ฉันเคยได้ยินจนถึงขณะนี้คือการต่อต้านการใช้การออกแบบด้วยชั้นเรียนที่เป็นรูปธรรม อาจจะใช้คลาสคอนกรีตที่เหมาะสมในบางสถานที่ มีปัญหาของคลาสทั่วไปที่ใช้คลาสคอนกรีตในการออกแบบไม่เป็นไร

1
วิธีจัดทำเอกสารอัลกอริทึมอย่างถูกต้องกับข้อมูลตัวอย่าง?
ฉันสงสัยว่าเอกสารประกอบของอัลกอริทึมควรมีอะไร? ไม่สามารถหาแนวทางที่เหมาะสมในการติดตาม ฉันมีในใจที่จะรวม สรุปอัลกอริทึม คำอธิบายของอัลกอริทึม ผังงาน รหัสเทียม ชุดข้อมูลอินพุตตัวอย่าง (หลายชุด) ข้อมูลที่ส่งออก การทดสอบหน่วย การทดลอง ลูกค้าขอเอกสารดังกล่าวเพื่อ: รักษาความมั่นใจในตัวเลขของเราเองรวมทั้งอธิบายกระบวนการของเราต่อลูกค้าที่มีศักยภาพเพื่อให้พวกเขารู้ว่าเรากำลังดำเนินการเพื่อตรวจสอบและตรวจสอบการคำนวณของเรา เอกสารนี้มีลักษณะอย่างไร (ตัวอย่าง PDF) คุณจะรวมอะไรเพิ่มเติมในเอกสารนี้ สิ่งที่ฉันแจกแจงคือสิ่งที่ดีหรือสิ่งนี้ควรจัดทำเป็นเอกสารแตกต่างกันอย่างไร คุณจะค้นหาตัวอย่างเอกสารดังกล่าวใน Google ได้อย่างไร

4
ทำไมการส่งวัตถุผ่านวิธีการแบบคงที่จะได้เปรียบ?
ทำไมจะมีความได้เปรียบในการใช้วิธีการแบบสแตติกและส่งผ่านการอ้างอิงไปยังวัตถุเป็นพารามิเตอร์แทนที่จะเรียกวิธีการบนวัตถุ เพื่อชี้แจงสิ่งที่ฉันหมายถึงพิจารณาชั้นเรียนต่อไปนี้: public class SomeClass { private double someValue; public SomeClass() { // Some constructor in which someValue is set } public void incrementValue() { someValue++; } } เปรียบเทียบกับการใช้ทางเลือกนี้ด้วยวิธีการคงที่: public class SomeClass { private double someValue; public SomeClass() { // Some constructor in which someValue is set } public static …

1
“ TILT” หมายถึงอะไรในความคิดเห็น
ฉันกำลังอ่านClean Codeของ Robert C. Martin และวลีนั้นTILTลึกลับปรากฏขึ้นในตัวอย่างโค้ดบางอย่าง ตัวอย่าง (ใน Java โดยวิธี): ... public String errorMessage() { switch (status) { case ErrorCode.OK: // TILT - Should not get here. return ""; case ErrorCode.UNEXPECTED_ARGUMENT: return "Unexpected argument"; case ErrorCode.MISSING_ARGUMENT: return "Missing argument"; ... } ... จากบริบทนี้ฉันเดาTILTว่าจะกำหนดสถานะที่ไม่สามารถเข้าถึงได้และรวมไว้เพียงเพื่อทำให้คอมไพเลอร์ (ตัวอย่างเช่นในโค้ดด้านบนTILTปรากฏในErrorCode.OKกรณีเนื่องจากไม่ควรมีข้อความแสดงข้อผิดพลาดหากรัฐเป็นOK) แต่ ฉันไม่แน่ใจ. ไม่มีใครรู้ว่าสิ่งที่TILTหมายถึง / หมายถึง?

2
ความละเอียดของข้อยกเว้น
ฉันใช้การถกเถียงระหว่างเพื่อนสองสามคนกับฉันพวกเขาชอบข้อยกเว้นทั่วไปเช่นClientErrorExceptionและServerErrorExceptionมีรายละเอียดเป็นฟิลด์ของข้อยกเว้นในขณะที่ฉันชอบทำสิ่งที่เฉพาะเจาะจงมากขึ้น ตัวอย่างเช่นฉันอาจมีข้อยกเว้นจำนวนหนึ่งเช่น: BadRequestException AuthenticationFailureException ProductNotFoundException แต่ละรายการเหล่านี้สร้างขึ้นตามรหัสข้อผิดพลาดที่ส่งคืนจาก API การติดตามข้อดีของข้อยกเว้นนี้ดูเหมือนว่าเป็นไปไม่ได้สำหรับ Java อย่างไรก็ตามความคิดเห็นของเพื่อนฉันไม่ใช่เรื่องแปลก มีวิธีที่ต้องการในแง่ของความสามารถในการอ่านโค้ดและการใช้งาน API หรือว่ามันเป็นเรื่องที่ชอบ?

1
วิธีการจัดการการทดสอบที่ไม่ใช่หน่วยในโครงการ?
ฉันมีรหัสบางอย่างในโครงการของฉันฉันเรียกตัวเองtestsว่าไม่ใช่การทดสอบหน่วย พวกเขาตั้งใจที่จะวิ่งและผลลัพธ์จะต้องมีการประเมินโดยมนุษย์ ฉันทำสิ่งนี้เพราะฉันสร้างเครื่องยนต์ฟิสิกส์และในระหว่างการพัฒนาฉันต้องดูว่าฉันกำลังทำอะไรอยู่ ดังนั้นฉันจึงทำsimulationแพ็คเกจในโมดูลทดสอบ เป็นการทดสอบหน่วยทางเทคนิคเพราะการจำลองกำลังใช้ไลบรารีการทดสอบหน่วย แต่ฉันไม่ได้ตั้งใจที่จะเรียกใช้พวกเขาทั้งหมดเช่นการทดสอบหน่วยที่แท้จริงของฉัน สิ่งที่ฉันต้องการทำคือแยกความแตกต่างของการทดสอบพิเศษจากการทดสอบหน่วยของฉันเพราะฉันต้องการเรียกใช้การทดสอบหน่วยทั้งหมดได้อย่างง่ายดาย ฉันคิดว่ามันเหมือนกับการทดสอบเชิงหน้าที่ คุณเคยเจอกรณีที่คุณต้องเตรียมใบสมัครสำหรับการทดสอบการทำงานหรือไม่? การจัดเตรียมการทดสอบการทำงาน (โดยทั่วไปคือแบบจำลองของฉัน) อยู่ที่ไหนในโครงการและวิธีแยกแยะความแตกต่างจากการทดสอบหน่วย ฉันอยู่ใน Java ดังนั้นฉันสามารถเปลี่ยนลายเซ็นวิธีการทั้งหมดของฉันจาก@Test public void myNamedTest()เป็นpublic static void main(String[] args)แต่มันจะลำบากและเป็นประโยชน์น้อยกว่าสำหรับฉันที่จะใช้แบบจำลองของฉัน ฉันใช้junitในgradleโครงการ โซลูชันใด ๆ ที่สร้างโฟลเดอร์ทดสอบพิเศษด้วยgradleยินดีต้อนรับ

1
ฉันจะโครงสร้างอินเทอร์เฟซเมื่อวัตถุใช้เพียงส่วนหนึ่งของอินเทอร์เฟซได้อย่างไร
ฉันมีโครงการที่ฉันมีสองคลาสที่ทั้งสองต้องการวัตถุเข้าถึงฐานข้อมูลที่ปรับปรุงตารางเดียวกัน ข้อ จำกัด ของกรอบงานและโครงการทำให้เป็นไปไม่ได้ที่จะรวมสองคลาสนี้ ฉันได้สร้างกรณีด้านล่างที่แสดงว่าการตั้งค่าเป็นอย่างไร คลาส A จำเป็นต้องสามารถอัปเดตและอ่านบันทึกในขณะที่คลาส B จำเป็นต้องสามารถอัปเดตและลบบันทึกได้ ถ้าฉันใช้คลาสเหมือนเดิมมันใช้งานได้ดี แต่ฉันมีปัญหากับความจริงที่ว่าแต่ละคลาสต้องการฟังก์ชันการทำงานที่ไม่ได้ใช้งาน ตัวอย่างเช่นในการใช้คลาส A ฉันต้องส่งผ่าน dao ที่ใช้ฟังก์ชั่นลบแม้ว่ามันจะไม่ถูกเรียกใช้ ในทำนองเดียวกันฉันต้องผ่านคลาส B a dao ที่ใช้ฟังก์ชั่นการอ่าน แต่มันจะไม่ถูกเรียก ฉันคิดเกี่ยวกับการเข้าถึงโดยการมีส่วนต่อประสานที่สืบทอดผู้อื่น (IReadDao, IUpdateDao, IDeleteDao เป็น daos ที่จะสืบทอดมาจาก) แต่วิธีการนี้โดยทั่วไปจะต้องใช้อินเทอร์เฟซที่แตกต่างกันสำหรับฟังก์ชั่นแต่ละชุด (IUpdateAndDelete ) ฉันต้องการใช้อินเทอร์เฟซสำหรับ dao เพราะฉันไม่ต้องการเชื่อมโยงแอปพลิเคชันกับฐานข้อมูล มีรูปแบบหรือวิธีการในการบรรลุสิ่งที่ฉันต้องการให้ใครรู้หรือไม่? ขอบคุณล่วงหน้า. class IDao { void update(ModelDao model); void delete(String guid); ModelDao read(String guid); …

2
วิธีการห่อหุ้มคลาสภายในใน API ที่เขียนด้วย Java?
เราต้องเขียนห้องสมุด โดยปกติมันควรมี API ที่เล็กมาก (กว้างที่สุดเท่าที่จำเป็นเล็กที่สุดเท่าที่จะทำได้) internals ของห้องสมุดค่อนข้างซับซ้อน ดังนั้นพวกเขาต้องการโครงสร้าง สำหรับโครงสร้างฉันเห็นสองวิธี: 1. ใช้แพ็คเกจ ข้อดี:ห้องสมุดสามารถจัดโครงสร้างอย่างเรียบร้อย ทุกอย่างในที่ของมัน ข้อเสีย:การใช้คลาสผ่านขอบแพคเกจจำเป็นต้องใช้คลาสสาธารณะจึงขยาย API ของไลบรารีทั้งหมด 2. ใช้คลาสภายในแบบคงที่ทั้งหมดในแพ็คเกจเดียว ข้อดี: ต้องการเพียงสิ่งสาธารณะน้อยมาก (คลาส, วิธีการและอื่น ๆ ) ที่จำเป็น ข้อด้อย:ชั้นเรียนถูกซ่อนไว้เพียงเพื่อจัดโครงสร้างพวกเขา นี่จะเป็นกรณีการใช้งานเพียงไม่กี่กรณีที่มีคลาสภายในแบบสแตติกจำนวนมากใช้อยู่ นักพัฒนาไม่คุ้นเคยกับสิ่งนั้นและอาจมองข้ามพวกเขา มีวิธีที่ดีกว่าในการบรรลุ API ขนาดเล็กในห้องสมุดที่มีโครงสร้างหรือไม่? แก้ไข:ฉันลืมพูดถึง: มันเป็นห้องสมุด Android ดังนั้นจึงไม่มี java9

3
มันตกลงหรือไม่สำหรับอินเตอร์เฟสที่ต้องพึ่งพาคลาสที่เป็นรูปธรรม?
ฉันกำลังสร้างส่วนติดต่อใน Java สำหรับตัวจัดการข้อผิดพลาดที่กำหนดเอง ต้องการส่งผ่านข้อผิดพลาดวัตถุข้อโต้แย้ง แต่ฉันต้องการมันเป็นลูกของExceptionชั้น จะใช้ชื่อคลาสที่กำหนดในอินเทอร์เฟซได้หรือไม่ มันจะทำให้อินเทอร์เฟซน้อยลงหรือไม่ขึ้นอยู่กับการใช้งานใด ๆ ฉันพยายามทำสิ่งนี้: public class CustomException { /* ... Implementation ... */ } public interface Interface { void onError(CustomException ex); }

2
รูปแบบของผู้สังเกตการณ์มีความเหมาะสมหรือไม่เมื่อผู้สังเกตการณ์ไม่เป็นอิสระต่อกัน?
ฉันมีclass Carซึ่งมี 2 คุณสมบัติ: และint price boolean inStockนอกจากนี้ยังถือเป็นListของabstract class State(ชั้นว่าง) มี 2 รัฐซึ่งสามารถนำมาใช้ในรถและแต่ละคนจะแสดงโดยระดับของตัวเอง: และclass Upgrade extends Stateclass Shipping extends State A Carสามารถเก็บหมายเลขใด ๆ ของแต่ละสถานะ 2 รัฐมีกฎต่อไปนี้: Upgrade: เพิ่ม1ราคาสำหรับแต่ละรัฐที่ใช้กับรถยนต์หลังจากนั้น Shippingถ้ามีอย่างน้อย 1 Shippingของรัฐในรายการแล้วมีการตั้งค่าinStockfalse ตัวอย่างเช่นเริ่มต้นด้วยprice = 1และinStock = true: add Shipping s1 --> price: 1, inStock: false add Upgrade g1 --> price: 1, …

2
ทำไมสำหรับแต่ละคนมีเครื่องหมายทวิภาคแทนที่จะเป็น "ใน"
จากคู่มือภาษา Java 5 : เมื่อคุณเห็นเครื่องหมายจุดคู่ (:) อ่านเป็น "ใน" ทำไมไม่ใช้inตั้งแต่แรกล่ะ? สิ่งนี้บักฉันมาหลายปีแล้ว เพราะมันไม่สอดคล้องกับภาษาที่เหลือ ยกตัวอย่างเช่นใน Java มีimplements, extends, superสำหรับความสัมพันธ์ระหว่างชนิดแทนสัญลักษณ์เช่นใน C ++, Scala หรือทับทิม ใน Java ลำไส้ใหญ่ใช้ใน 5 บริบท ทั้งสามได้รับมรดกจากซีและอีกสองคนได้รับการรับรองโดย Joshua Bloch อย่างน้อยนั่นก็คือเขาพูดในระหว่างการพูดคุยเรื่อง "การปิดการทะเลาะวิวาท" สิ่งนี้เกิดขึ้นเมื่อเขาวิพากษ์วิจารณ์การใช้งานโคลอนสำหรับการทำแผนที่ไม่สอดคล้องกับความหมายในแต่ละครั้ง ซึ่งสำหรับฉันดูเหมือนว่าแปลกเพราะมันเป็นรูปแบบที่คาดหวังสำหรับแต่ละทารุณกรรม กดไลค์list_name/category: elementsหรือlaberl/term: meaning ฉันสอดแนมรอบ jcp และ jsr แต่ไม่พบว่าไม่มีเครื่องหมายของรายการส่งเมล ไม่พบการสนทนาในเรื่องนี้โดย google forเพียงมือใหม่สับสนโดยความหมายของลำไส้ใหญ่ ข้อโต้แย้งหลักต่อที่inมีให้: ต้องการคำหลักใหม่ และ lexing ซับซ้อน ลองดูคำจำกัดความของไวยากรณ์ที่เกี่ยวข้อง: คำให้การ …
9 java 

1
การออกแบบรหัส: การมอบหมายหน้าที่ตามอำเภอใจ
ใน PPCG เรามักจะมีความท้าทายKing of the Hillซึ่งทำให้บ็อตโค้ดแตกต่างกัน เราไม่ต้องการ จำกัด การท้าทายเหล่านี้ในภาษาเดียวดังนั้นเราจึงทำการสื่อสารข้ามแพลตฟอร์มผ่าน I / O มาตรฐาน เป้าหมายของฉันคือการเขียนเฟรมเวิร์กที่ผู้เขียนท้าทายจะสามารถใช้ในการเขียนการท้าทายเหล่านี้ได้ง่ายขึ้น ฉันได้ทำตามข้อกำหนดต่อไปนี้แล้วฉันต้องการที่จะปฏิบัติตาม: ที่นักเขียนท้าทายคือสามารถที่จะทำให้ชั้นเรียนที่วิธีการเป็นตัวแทนของแต่ละการสื่อสารที่แตกต่างกัน ตัวอย่างเช่นในการท้าทายGood vs Evilของเราผู้เขียนจะสร้างPlayerคลาสที่มีabstract boolean vote(List<List<Boolean>> history)วิธีการ คอนโทรลเลอร์สามารถให้อินสแตนซ์ของคลาสด้านบนที่สื่อสารผ่าน I / O มาตรฐานเมื่อเรียกเมธอดที่กล่าวมาแล้ว ที่กล่าวว่าอินสแตนซ์ทั้งหมดของคลาสข้างต้นไม่จำเป็นต้องสื่อสารผ่าน I / O มาตรฐาน 3 ของบอตอาจเป็นบ็อต Java ดั้งเดิม (นั่นก็แค่แทนที่Playerคลาสที่อีก 2 อยู่ในภาษาอื่น) เมธอดจะไม่มีอาร์กิวเมนต์จำนวนเท่ากันเสมอ (และจะไม่มีค่าตอบแทน) ฉันต้องการนักเขียนที่ท้าทายต้องทำงานให้น้อยที่สุดเท่าที่จะทำได้เพื่อทำงานกับกรอบงานของฉัน ฉันไม่ได้ใช้การสะท้อนเพื่อแก้ไขปัญหาเหล่านี้ ฉันได้พิจารณาให้ผู้เขียนผู้ท้าทายทำสิ่งต่อไปนี้: class PlayerComm extends Player { private …

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