ทำไม Eclipse ถึงบ่นเกี่ยวกับ @Override เกี่ยวกับวิธีการอินเทอร์เฟซ


135

ฉันมีโปรเจ็กต์ที่มีอยู่ซึ่งใช้@Overrideเมธอดที่แทนที่เมธอดอินเตอร์เฟสแทนที่จะเป็นเมธอด superclass ฉันไม่สามารถแก้ไขรหัสนี้ได้ แต่ฉันต้องการให้ Eclpse หยุดบ่นเกี่ยวกับคำอธิบายประกอบเพราะฉันยังสามารถสร้างด้วย Maven ได้

ฉันจะปิดการใช้งานข้อผิดพลาดนี้ได้อย่างไร

หมายเหตุ: เนื่องจากข้อกำหนดของโครงการฉันต้องคอมไพล์สำหรับ Java 1.5


แต่ดูเหมือนว่าแหล่งที่มาจะกำหนดเป้าหมายไปที่ Java 6?
akarnokd

แน่นอน. Java 5 เป็นข้อกำหนดที่ล่าช้าสำหรับการรองรับ mac
Stefan Kendall

คำตอบ:


268

การใช้@Overrideคำอธิบายประกอบบนเมธอดที่ใช้ซึ่งประกาศโดยอินเทอร์เฟซนั้นใช้ได้เฉพาะตั้งแต่ Java 6 เป็นต้นไป มันเป็นข้อผิดพลาดใน Java 5

ตรวจสอบให้แน่ใจว่าโปรเจ็กต์ IDE ของคุณได้รับการตั้งค่าให้ใช้ Java 6 JRE และ "ความเข้ากันได้ของซอร์ส" ถูกตั้งค่าเป็น 1.6 หรือสูงกว่า:

  1. เปิดหน้าต่าง> การตั้งค่าโต้ตอบ
  2. เรียกดู Java> คอมไพเลอร์
  3. ที่นั่นตั้งค่า "ระดับการปฏิบัติตามคอมไพเลอร์" เป็น 1.6

โปรดจำไว้ว่า Eclipse สามารถแทนที่การตั้งค่าส่วนกลางเหล่านี้สำหรับโปรเจ็กต์เฉพาะได้ดังนั้นให้ตรวจสอบด้วย


อัปเดต:

ข้อผิดพลาดภายใต้ Java 5 ไม่ใช่แค่ Eclipse เท่านั้น การใช้javacโดยตรงจากบรรทัดคำสั่งจะทำให้คุณมีข้อผิดพลาดเดียวกัน ไม่ใช่ซอร์สโค้ด Java 5 ที่ถูกต้อง

อย่างไรก็ตามคุณสามารถระบุ-target 1.5อ็อพชันเป็น JDK 6 javacซึ่งจะสร้างไฟล์คลาสเวอร์ชัน Java 5 จากซอร์สโค้ด Java 6


ไม่มันจะไม่ มันจะสร้างข้อความแสดงข้อผิดพลาด "javac: source release 1.6 ต้องใช้ target release 1.6"
Michael Borgwardt

9
ไม่มันจะไม่ มันจะสร้างไฟล์คลาสที่คอมไพล์ จะให้ข้อผิดพลาดนั้นก็ต่อเมื่อคุณระบุอ็อพชัน -source 1.6 ซึ่งไม่จำเป็นในการทำงานนี้
erickson

คุณรู้ไหมเนื่องจากฉันสร้างด้วยตนเองฉันสามารถออกจากระดับแหล่งที่มาที่ 1.6 ได้ ฉันไม่สามารถใช้การกำหนดค่าแบบผสมใด ๆ ได้และดูเหมือนว่าจะง่ายที่สุด
Stefan Kendall

@erickson การดาวน์เกรด -target -source ทำงานสำหรับ 1.7 ถึง 1.6 ด้วยหรือไม่ stackoverflow.com/q/8869869/632951
Pacerier

สิ่งนี้ดูเหมือนจะใช้ไม่ได้กับ 1.8 JDK -source 1.6 -target 1.5 พูดว่า: javac: source release 1.6 ต้องการรีลีสเป้าหมาย 1.6
Don Hatch

39

ดำเนินการดังต่อไปนี้:

โครงการ -> คุณสมบัติ -> คอมไพเลอร์ java ->

  • เปิดใช้งานการตั้งค่าเฉพาะโครงการ - "ใช่"
  • การปฏิบัติตามคอมไพเลอร์ - 1.6
  • ไฟล์คลาสที่สร้างขึ้นและความเข้ากันได้ของซอร์ส - 1.5

ขอบคุณ - ไม่ทราบว่าแต่ละโครงการมีการตั้งค่าของตัวเองด้วย
whostolemyhat

2
ในกรณีของฉันฉันจำเป็นต้องปิดใช้งานตัวเลือกนี้
Muten Roshi

12

ตรวจสอบด้วยว่าโครงการมีด้านหรือไม่ เวอร์ชัน java อาจถูกลบล้างที่นั่น


1
คะแนน! คุณพูดถูกด้านโครงการของฉันกำลังลบล้างการตั้งค่าการปฏิบัติตามข้อกำหนดทั่วโลก ขอบคุณ!
bpawlowski

9

อาจเปิดใช้การตั้งค่าเฉพาะโครงการ เลือกโครงการของคุณProject > Properties > Java Compiler, หรือการเปลี่ยนแปลงและเหนือไม่ลืมที่สอดคล้องกัน ในกรณีที่มันไม่ทำงานเอาโครงการของคุณจากคราสลบ, , ไฟล์ และคราส มันได้ผลสำหรับฉันuncheckEnable project specific settingsJdk 1.6JRE
.settings folders.project.classpathclean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your project


7

คุณสามารถเปลี่ยนการตั้งค่าคอมไพเลอร์เพื่อยอมรับไวยากรณ์ Java 6 แต่สร้างเอาต์พุต Java 5 (ตามที่ฉันจำได้) และตั้งค่า "Generated class files compatible" ให้ต่ำลงเล็กน้อยหากต้องการโดยรันไทม์ของคุณ อัปเดต : ฉันตรวจสอบ Eclipse แต่จะบ่นว่าฉันตั้งค่าความเข้ากันได้ของซอร์สเป็น 1.6 และความเข้ากันได้ของคลาสเป็น 1.5 หาก 1.6 ไม่ได้รับอนุญาตฉันมักจะแสดงความคิดเห็นด้วยตนเองเกี่ยวกับคำอธิบายประกอบ @Override ที่ไม่เหมาะสมในแหล่งที่มา (ซึ่งไม่ช่วยกรณีของคุณ)

Update2: หากคุณทำเฉพาะการสร้างด้วยตนเองคุณสามารถเขียนโปรแกรมขนาดเล็กที่คัดลอกโปรเจ็กต์ต้นฉบับไปยังโปรเจ็กต์ใหม่ตัดคำอธิบายประกอบ @Override จากแหล่งจาวาและคุณเพิ่งกด Clean project ใน Eclipse


คุณสามารถระบุรายละเอียดใด ๆ ได้หรือไม่?
Stefan Kendall

อยู่ในหน้าเดียวกับที่ระบุโดย erickson
akarnokd

โครงการมีขนาดใหญ่หลาย GB "สำเนา" ธรรมดา ๆ นั้นไม่สามารถใช้งานได้จริง : /
Stefan Kendall

ในกรณีนี้คุณจะต้องขออนุญาตเปลี่ยนแปลง หรือสร้างสาขาสำหรับแหล่งที่มาที่เข้ากันได้ 1.5 และแก้ไขไฟล์ java ด้วยตนเอง
akarnokd

1

คุณยังสามารถลอง Retroweaver เพื่อสร้างเวอร์ชัน Java5 จากคลาส Java6


1

ใช้ Eclipse เพื่อค้นหาและแทนที่ (ลบ) อินสแตนซ์ทั้งหมดของ "@Override" จากนั้นเพิ่มการลบล้างที่ไม่ใช่อินเทอร์เฟซกลับโดยใช้ "Clean Up"

ขั้นตอน:

  1. เลือกโครงการหรือโฟลเดอร์ที่มีไฟล์ต้นฉบับของคุณ
  2. ไปที่ "ค้นหา> ค้นหา ... " (Ctrl-H) เพื่อเปิดกล่องโต้ตอบการค้นหา
  3. ไปที่แท็บ "การค้นหาไฟล์"
  4. ป้อน "@Override" ใน "ข้อความที่มี" และ "* .java" ใน "รูปแบบชื่อไฟล์" คลิก "แทนที่ ... " จากนั้นคลิก "ตกลง" เพื่อลบอินสแตนซ์ทั้งหมดของ "@Override"
  5. ไปที่ "Window> Preferences> Java> Code Style> Clean Up" และสร้างโปรไฟล์ใหม่
  6. แก้ไขโปรไฟล์และยกเลิกการเลือกทุกอย่างยกเว้น "รหัสที่หายไป> เพิ่มคำอธิบายประกอบที่ขาดหายไป> @Override" ตรวจสอบว่าไม่ได้เลือก "การใช้งานวิธีการอินเทอร์เฟซ"
  7. เลือกโครงการหรือโฟลเดอร์ที่มีไฟล์ต้นฉบับของคุณ
  8. เลือก "Source> Clean Up ... " (Alt + Shift + s ตามด้วย u) จากนั้นเลือก "Finish" เพื่อเพิ่มการลบล้างที่ไม่ใช่อินเทอร์เฟซ

0

ฉันเข้าใจปัญหาของคุณเปลี่ยน jdk จาก jdk ของคุณเป็นมากกว่า 1.5


0

โดยการกำหนดค่าว่าโปรเจ็กต์ IDE ถูกตั้งค่าให้ใช้ Java 6 JRE หรือสูงกว่าในบางครั้งไม่ได้ลบข้อผิดพลาด eclipse สำหรับฉันการรีสตาร์ท Eclipe IDE ช่วยได้


0

แม้ว่าหลังจากเปลี่ยนการตั้งค่าการปฏิบัติตามข้อกำหนดของคอมไพลเลอร์เป็น 1.6 หรือ 1.7 จากแท็บ windows แล้วจึงเลือกใช้ java จากนั้นคอมไพเลอร์และตั้งค่าการปฏิบัติตามข้อกำหนดของคอมไพเลอร์ แต่ฉันก็ยังคงประสบปัญหานี้ แนวคิดก็คือเราต้องไปที่โฟลเดอร์โครงการคลิกขวา Java และตั้งค่าการปฏิบัติตามคอมไพเลอร์เป็น 1.6 หรือสูงกว่า สิ่งนี้ได้ผลสำหรับฉัน

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