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

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

6
การรวมวัตถุเป็นเทคนิคที่เลิกใช้หรือไม่?
ฉันคุ้นเคยกับแนวคิดของการรวมวัตถุและฉันพยายามที่จะใช้มันให้มากที่สุด นอกจากนี้ฉันมักจะคิดว่าการรวมวัตถุเป็นบรรทัดฐานมาตรฐานที่ฉันสังเกตเห็นว่า Java เองรวมถึงกรอบงานอื่น ๆ ที่ใช้ร่วมกันมากที่สุด เมื่อเร็ว ๆ นี้แม้ว่าฉันจะอ่านอะไรบางอย่างที่เป็นของใหม่ การรวมกำไรนั้นทำให้ประสิทธิภาพของโปรแกรมแย่ลงโดยเฉพาะในแอปพลิเคชันที่เกิดขึ้นพร้อมกันและขอแนะนำให้สร้างอินสแตนซ์newวัตถุแทนเนื่องจากใน JVM รุ่นใหม่การสร้างอินสแตนซ์ของวัตถุนั้นเร็วมาก ฉันอ่านสิ่งนี้ในหนังสือ: Java Concurrency in Practice ตอนนี้ฉันเริ่มคิดว่าถ้าฉันเข้าใจบางสิ่งบางอย่างที่นี่ตั้งแต่ส่วนแรกของหนังสือแนะนำให้ใช้Executorsซ้ำนั้นThreadแทนที่จะสร้างอินสแตนซ์ใหม่ การรวมวัตถุได้กลายเป็นที่นิยมในปัจจุบัน?

5
การพึ่งพาการฉีด: การฉีดภาคสนามและการฉีดคอนสตรัคเตอร์?
ฉันรู้ว่านี่คือการอภิปรายที่ร้อนแรงและความคิดเห็นมีแนวโน้มที่จะเปลี่ยนแปลงไปตามกาลเวลาเพื่อแนวทางการปฏิบัติที่ดีที่สุด ผมเคยใช้เฉพาะการฉีดฟิลด์สำหรับชั้นเรียนของฉันจนผมเริ่มอ่านบนบล็อกที่แตกต่างกัน (EXS: petrikainulainenและschauderhaftและฟาวเลอร์ ) เกี่ยวกับประโยชน์ของการฉีดสร้าง ฉันได้เปลี่ยนวิธีการของฉันที่จะใช้การฉีดคอนสตรัคสำหรับการพึ่งพาที่จำเป็นและการฉีด Setter สำหรับการพึ่งพาตัวเลือก อย่างไรก็ตามเมื่อไม่นานมานี้ฉันได้มีการถกเถียงกับผู้เขียน JMockit ซึ่งเป็นกรอบการเยาะเย้ยซึ่งเขาเห็นว่าการสร้างคอนสตรัคเตอร์และสุนัขเซทเทอร์เตอร์เป็นการปฏิบัติที่ไม่ดีและบ่งชี้ว่าชุมชน JEE เห็นด้วยกับเขา ในโลกปัจจุบันมีวิธีที่เหมาะสมกว่าในการฉีดหรือไม่? การฉีดภาคสนามเป็นที่ต้องการหรือไม่? หลังจากเปลี่ยนไปใช้คอนสตรัคเตอร์ฉีดจากการฉีดภาคสนามในช่วงสองสามปีที่ผ่านมาฉันพบว่ามันชัดเจนกว่าที่จะใช้ แต่ฉันสงสัยว่าฉันควรตรวจสอบมุมมองของฉันอีกครั้งหรือไม่ ผู้เขียนJMockit (Rogério Liesenfeld)มีความเชี่ยวชาญใน DI อย่างชัดเจนดังนั้นฉันรู้สึกผูกพันที่จะต้องทบทวนวิธีการของฉันเนื่องจากเขารู้สึกอย่างยิ่งกับการฉีดคอนสตรัคเตอร์ / สุนัขเซทเตอร์

6
เหตุใด C # จึงสร้างด้วยคำหลัก“ ใหม่” และ“ เสมือน + แทนที่” ซึ่งไม่เหมือนกับ Java
ใน Java ไม่มีvirtual, new, overrideคำหลักสำหรับความหมายวิธีการ ดังนั้นการทำงานของวิธีจึงง่ายต่อการเข้าใจ สาเหตุถ้าDerivedClassขยายBaseClassและมีเมธอดที่มีชื่อเดียวกันและลายเซ็นเดียวกันของBaseClass การแทนที่จะเกิดขึ้นที่ polymorphism แบบรันไทม์ (จัดเตรียมเมธอดไม่ใช่static) BaseClass bcdc = new DerivedClass(); bcdc.doSomething() // will invoke DerivedClass's doSomething method. ตอนนี้มาถึง C # จะมีความสับสนมากและยากที่จะเข้าใจวิธีการnewหรือvirtual+deriveหรือใหม่ + เสมือนแทนที่คือการทำงาน ฉันไม่สามารถเข้าใจว่าทำไมในโลกนี้ฉันจะเพิ่มวิธีการในDerivedClassชื่อและลายเซ็นเดียวกันกับBaseClassและกำหนดพฤติกรรมใหม่ แต่ที่ polymorphism เวลาทำงานBaseClassวิธีการจะถูกเรียก! (ซึ่งไม่ใช่การเอาชนะ แต่ควรมีเหตุผล) ในกรณีที่virtual + overrideแม้ว่าการใช้งานเชิงตรรกะที่ถูกต้อง แต่โปรแกรมเมอร์ต้องคิดว่าวิธีการที่เขาควรให้สิทธิ์แก่ผู้ใช้ในการแทนที่ในเวลาที่เข้ารหัส ซึ่งมีข้อดีบางอย่าง(อย่าไปที่นั่นตอนนี้) เหตุใดใน C # จึงมีพื้นที่เหลือเฟือสำหรับการใช้เหตุผลและความสับสน ดังนั้นฉันจึงอาจ reframe คำถามของฉันเป็นที่บริบทของโลกแห่งความจริงฉันควรคิดว่าการใช้งานvirtual + overrideแทนnewและยังใช้newแทนvirtual + …

18
ทำไมคนยังพูดว่า Java ช้า? [ปิด]
เป็นเวลานานใน SO และในที่อื่น ๆ Java มีชื่อเสียงว่าเป็นคนช้า จากเรื่องตลกไปจนถึงความคิดเห็นในคำถามและคำตอบผู้คนยังคงเชื่อว่า Java นั้นช้าตามประสบการณ์ในยุค 90 เพียงอย่างเดียว นี่คือปัญหาของฉัน: เราได้หักล้าง (ส่วนใหญ่) สาเหตุที่ผู้คนเชื่อว่าชวาช้า นอกเหนือจากสิ่งเล็ก ๆ แล้ว Java นั้นค่อนข้างเร็ว ดังนั้นทำไมคนยังปฏิเสธที่จะเชื่อว่า Java เร็วในขณะนี้ เป็นส่วนหนึ่งของความคิดของพวกเขาหรือไม่ว่าอะไรที่ไม่ใช่ C / C ++ นั้นช้า? เป็นเพราะคนไม่ได้ตรวจสอบเมื่อเวลาผ่านไป? เป็นเพราะคนมีความลำเอียงใช่ไหม
61 java  performance 

6
ความแตกต่างระหว่างระดับบริการและระดับผู้ช่วย [ปิด]
ฉันต้องการที่จะรู้ว่าสิ่งที่แตกต่างชั้นบริการจากระดับยูทิลิตี้หรือชั้นผู้ช่วย? ชั้นเรียนที่มีวิธีการพื้นฐานเรียก dao เป็นบริการหรือไม่ การใช้คลาส Helper ไม่เป็นการละเมิด SRP หรือไม่

8
การปรับเปลี่ยนพารามิเตอร์ขาเข้าเป็น antipattern หรือไม่? [ปิด]
ฉันกำลังเขียนโปรแกรมใน Java และฉันมักจะทำเช่นนี้: public OtherObject MyObject2OtherObject(MyObject mo){ ... Do the conversion return otherObject; } ในที่ทำงานใหม่รูปแบบคือ: public void MyObject2OtherObject(MyObject mo, OtherObject oo){ ... Do the conversion } สำหรับฉันมันส่งกลิ่นนิดหน่อยเพราะฉันคุ้นเคยกับการไม่เปลี่ยนพารามิเตอร์ขาเข้า การแก้ไขพารามิเตอร์ขาเข้านี้เป็น antipattern หรือไม่ มันมีข้อบกพร่องร้ายแรงบ้างไหม?

7
การครอบคลุมรหัสเน้นวิธีที่ไม่ได้ใช้ - ฉันควรทำอย่างไร
ฉันได้รับมอบหมายให้เพิ่มรหัสครอบคลุมของโครงการ Java ที่มีอยู่ ฉันสังเกตเห็นว่าเครื่องมือครอบคลุมรหัส ( EclEmma ) ได้เน้นวิธีการบางอย่างที่ไม่เคยเรียกจากที่ใดก็ได้ ปฏิกิริยาเริ่มต้นของฉันคือไม่เขียนการทดสอบหน่วยสำหรับวิธีการเหล่านี้ แต่เพื่อเน้นพวกเขาไปยังผู้จัดการสายงาน / ทีมของฉันและถามว่าทำไมฟังก์ชันเหล่านี้ถึงเริ่มต้นด้วย วิธีการที่ดีที่สุดจะเป็นอย่างไร เขียนการทดสอบหน่วยสำหรับพวกเขาหรือตั้งคำถามว่าทำไมถึงมี

10
แสดงดีกว่า () + ซ่อน () หรือ SetVisible (มองเห็นบูล) หรือไม่
ดีกว่าอะไรและเพราะอะไร (จากมุมมองของการออกแบบอินเตอร์เฟส): a) มีสองShow()และHide()ฟังก์ชั่น b) การมีSetVisible(bool visible)ฟังก์ชั่นเดียว แก้ไข: ตัวอย่างเช่นวัตถุบางอย่างมีสถานะการมองเห็นและฟังก์ชั่นนี้จะใช้ในการเปลี่ยนแปลง ค) มีทั้งสามShow(), Hide(), SetVisible(bool visible)ฟังก์ชั่น
59 java  c++  interfaces 

11
บทวิจารณ์สมัยใหม่ของ Java [ปิด]
ฉันเขียนโปรแกรมมาสองสามปีแล้วและฉันเริ่มต้นที่ Java และในเวลาที่ฉันพบแหล่งข้อมูลหลายแห่งที่อ้างว่า Java เป็นภาษาที่ด้อยกว่าไม่ทางใดก็ทางหนึ่ง ฉันรู้ดีว่าแต่ละภาษามีจุดแข็งและจุดอ่อน แต่หลายสิ่งที่ฉันได้อ่านเกี่ยวกับ Java ดูเหมือนจะล้าสมัย เหตุผลที่อ้างถึงบ่อยที่สุดสำหรับ Java ที่ด้อยกว่าคือมันช้ากว่าภาษาอื่น ๆ ที่รวบรวมเช่น C ++ หลายคนวิจารณ์นักออกแบบเกม Notch (ผู้พัฒนาเกม Minecraft) สำหรับการใช้งานจาวาเพราะขาดความชัดเจนในแผนกประสิทธิภาพ ฉันรู้ว่า Java ช้าลงมากในวันนี้ แต่มีการปรับปรุงมากมายตั้งแต่นั้นมาโดยเฉพาะอย่างยิ่งการรวบรวม JIT ฉันต้องการที่จะได้รับความคิดเห็นวัตถุประสงค์ของ Java เป็นภาษาวันนี้ ดังนั้นคำถามของฉันมี 4 ส่วน ประสิทธิภาพ. วันนี้ความเร็วของ Java เปรียบเทียบกับ C ++ อย่างไร ข เป็นไปได้ไหมที่จะสร้างชื่อ AAA ที่ทันสมัยโดยใช้ Java? ค Java ช้ากว่า C ++ เป็นพิเศษในด้านใดบ้าง? …


7
คุณเข้ารหัสชนิดข้อมูลพีชคณิตในภาษา C # - หรือภาษา Java ได้อย่างไร
มีปัญหาบางอย่างที่แก้ไขได้อย่างง่ายดายโดย Algebraic Data Types เช่น List type สามารถแสดงออกได้อย่างชัดเจนว่า: data ConsList a = Empty | ConsCell a (ConsList a) consmap f Empty = Empty consmap f (ConsCell a b) = ConsCell (f a) (consmap f b) l = ConsCell 1 (ConsCell 2 (ConsCell 3 Empty)) consmap (+1) l ตัวอย่างเฉพาะนี้อยู่ใน Haskell แต่มันจะคล้ายกันในภาษาอื่นที่มีการสนับสนุนเนทิฟสำหรับประเภทข้อมูลพีชคณิต …

4
มีกรณีพิเศษที่เราสามารถรับรหัสซ้ำได้หรือไม่
ฉันกำลังทำงานในโครงการซอฟต์แวร์ที่เราต้องสร้าง API สามตัว หนึ่งสำหรับบ้านธนาคารช่องทางหนึ่งสำหรับหน่วยงานและช่องทางที่สามสำหรับโทรศัพท์มือถือช่อง API ของเอเจนซีนั้นสมบูรณ์ที่สุดเนื่องจากมีฟังก์ชั่นทั้งหมด .. จากนั้นเป็น Home API ที่เล็กกว่าและ API มือถือ สถาปนิกที่นี่สร้างเลเยอร์ทั่วไป (บริการ EJB ข้ามแชนเนลที่แชร์โดย API ทั้งหมด) แต่ API นั้นแตกต่างกัน ตอนนี้ไม่มีความแตกต่างใหญ่ระหว่าง API ทีมใหญ่เริ่มต้นด้วยแชแนลเอเจนซี่และเรากำลังปรับให้เข้ากับช่องทางบ้าน เราเป็นเพียงการเพิ่มคุณค่าของวัตถุให้กับแอพหลักของเรา มิฉะนั้นรหัสจะคล้ายกัน 95% ระหว่าง API API นั้นสร้างมาจากSpring MVCและมี (ตัวควบคุมรุ่นและยูทิลิตี้บางอย่าง) โดยพื้นฐานแล้วคอนโทรลเลอร์กำลังทำการแมป BO กับ ChannelObject (ดูเหมือนว่าฉันไม่ใช่สถานที่ที่เหมาะสมในการทำเช่นนั้น) และยูทิลิตี้และซีเรียลไลเซอร์บางส่วน ทั้งหมดซ้ำกันในตอนนี้ พวกเขาบอกว่าสาเหตุของการทำซ้ำคือพวกเขาต้องการให้ API แยกต่างหาก "ถ้าพรุ่งนี้เราต้องการพฤติกรรมที่แตกต่างสำหรับบ้านมากกว่าเอเจนซี่หรือมือถือเราจะไม่ดิ้นรน !!" มีกรณีที่เราควรยอมรับรหัสซ้ำหรือไม่
57 java  api  spring 

3
มีประโยชน์ด้านประสิทธิภาพการใช้ไวยากรณ์อ้างอิงวิธีแทนไวยากรณ์แลมบ์ดาใน Java 8 หรือไม่
วิธีการอ้างอิงข้ามค่าใช้จ่ายของเสื้อคลุมแลมบ์ดา? พวกเขาอาจจะในอนาคตหรือไม่ อ้างอิงจากการสอนของ Java เกี่ยวกับวิธีการอ้างอิง : บางครั้ง ... การแสดงออกแลมบ์ดาไม่ทำอะไรเลยนอกจากเรียกวิธีการที่มีอยู่ ในกรณีเหล่านั้นมักจะชัดเจนกว่าในการอ้างอิงถึงวิธีการที่มีอยู่ตามชื่อ การอ้างอิงวิธีใช้ทำให้คุณสามารถทำได้ มันเป็นแลมบ์ดาขนาดกะทัดรัดและอ่านง่ายสำหรับวิธีการที่มีชื่ออยู่แล้ว ฉันชอบไวยากรณ์แลมบ์ดากับไวยากรณ์การอ้างอิงเมธอดด้วยเหตุผลหลายประการ: แลมบ์ดานั้นชัดเจนขึ้น แม้จะมีการอ้างสิทธิ์ของออราเคิล แต่ฉันพบว่าแลมบ์ดาไวยากรณ์นั้นง่ายต่อการอ่านมากกว่าการอ้างอิงวิธีการออบเจ็กต์สั้น ๆ เพราะไวยากรณ์การอ้างอิงเมธอดนั้นไม่ชัดเจน: Bar::foo คุณกำลังเรียกวิธีการหนึ่งอาร์กิวเมนต์คงที่ในชั้นเรียนของ x และผ่านมันได้หรือไม่ x -> Bar.foo(x) หรือคุณกำลังเรียกวิธีการเป็นศูนย์อาร์กิวเมนต์บน x? x -> x.foo() ไวยากรณ์การอ้างอิงเมธอดสามารถยืนอยู่ได้ทั้งอันใดอันหนึ่ง มันซ่อนสิ่งที่รหัสของคุณกำลังทำอยู่ แลมบ์ดาปลอดภัยกว่า หากคุณอ้างอิง Bar :: foo เป็นวิธีการเรียนและ Bar ภายหลังเพิ่มวิธีการตัวอย่างที่มีชื่อเดียวกัน (หรือในทางกลับกัน) รหัสของคุณจะไม่รวบรวมอีกต่อไป คุณสามารถใช้ lambdas อย่างสม่ำเสมอ คุณสามารถห่อฟังก์ชั่นใด ๆ ในแลมบ์ดา - เพื่อให้คุณสามารถใช้ไวยากรณ์เดียวกันได้ทุกที่ …

6
ผู้ทะเยอทะยานควรโยนข้อยกเว้นถ้าวัตถุนั้นมีสถานะที่ไม่ถูกต้อง?
ฉันมักจะพบปัญหานี้โดยเฉพาะใน Java แม้ว่าฉันคิดว่ามันเป็นปัญหา OOP ทั่วไป นั่นคือการเพิ่มข้อยกเว้นพบปัญหาการออกแบบ สมมติว่าฉันมีคลาสที่มีString nameฟิลด์และString surnameฟิลด์ จากนั้นจะใช้ฟิลด์เหล่านั้นเพื่อเขียนชื่อเต็มของบุคคลเพื่อแสดงในเอกสารบางประเภทพูดใบแจ้งหนี้ public void String name; public void String surname; public String getCompleteName() {return name + " " + surname;} public void displayCompleteNameOnInvoice() { String completeName = getCompleteName(); //do something with it.... } ตอนนี้ฉันต้องการเสริมสร้างพฤติกรรมของชั้นเรียนของฉันโดยการโยนข้อผิดพลาดถ้าdisplayCompleteNameOnInvoiceมีการเรียกก่อนที่ชื่อจะได้รับมอบหมาย ดูเหมือนจะเป็นความคิดที่ดีใช่ไหม? ฉันสามารถเพิ่มรหัสยกข้อยกเว้นให้กับgetCompleteNameวิธีการ แต่ด้วยวิธีนี้ฉันละเมิดสัญญา 'โดยนัย' กับผู้ใช้คลาส ใน getters ทั่วไปไม่ควรโยนข้อยกเว้นหากไม่ได้ตั้งค่า …

2
เมื่อไม่ใช้ Google Web Toolkit [ปิด]
ฉันกำลังพิจารณาใช้ GWT ในโครงการพัฒนาเว็บแอพหลัก ๆ ของ บริษัท นั่นคือข้อได้เปรียบที่สำคัญในสายตาของฉันคือการคอมไพล์ข้ามไปยัง Javascript ซึ่ง (อย่างน้อยในทางทฤษฎี) จะช่วยทีมของฉันลดขนาดของสแต็คเทคโนโลยี . อย่างไรก็ตามก่อนที่จะถูกไฟไหม้ (เหมือน devs ส่วนใหญ่) ฉันต้องการได้ยินจากโปรแกรมเมอร์ที่ใช้งานจริงกับปัญหาใด ๆ กับ GWT ซึ่งจะขัดขวางหรือ จำกัด มันใช้ภายในโดเมนปัญหาบางอย่าง อะไรคือข้อโต้แย้งในการใช้ GWT และเพราะอะไร
55 java  javascript  ajax  gwt 

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