Có một tình huống thú vị sau khi phát hành Java 1.8.0_25 vào vùng hoang dã ... Tôi tin rằng gốc của vấn đề của tôi là liên quan chủ yếu đến các tính năng mới (đến 1.8) của việc triển khai "mặc định" trong Giao diện.Java 8: Trình tách, bộ lặp, bộ sưu tập và các thực thi "mặc định" trong giao diện (Các phương thức trùng lặp có tên là bộ tách)
Ứng dụng tôi đang làm việc hiện được nhắm mục tiêu là 1.7, cho đến bây giờ đã hoạt động tốt. Cho đến khi người dùng bắt đầu cập nhật lên 1.8. Bây giờ người dùng của chúng tôi đã bắt đầu cập nhật lên 1,8, bàn tay của chúng tôi buộc phải chuyển sang hỗ trợ 1,8.
Chúng tôi đã khắc phục hầu hết các sự cố (chủ yếu liên quan đến các thay đổi đối với các gói JavaFX trong khoảng từ 1.7 đến 1.8) nhưng vẫn còn một vấn đề.
Trong sự khôn ngoan của tôi, hoặc thiếu đó, tôi, một số thời gian trước đây, quyết định tạo ra một SortedList <T> mà kéo dài từ AbstractList <T>. Cho đến nay, lớp học này đã làm việc tốt, tuy nhiên khi chạy trên một thời gian chạy 1.8, tôi nhận được:
Duplicate methods named spliterator with the parameters() and() are inherited
from the types Collection<T> and Iterable<T>
này, với tôi, dường như được gây ra bởi việc triển khai "mặc định" trong một số các giao diện được thực hiện bởi AbstractList <T> (lớp SortedList <T> không thực hiện bất kỳ Giao diện bổ sung nào khác ngoài Serializable). Thực hiện Serializable là một vấn đề khác đối với chúng tôi, vì chúng tôi cần hỗ trợ deserialisation của các đối tượng SortedList <T>, không có cách nào xung quanh điều đó!).
Tôi có thể loại bỏ lỗi bằng cách cung cấp triển khai ghi đè bộ tách() trong lớp SortedList <T> của tôi. Tuy nhiên, nếu điều này được xây dựng, nó không còn chạy trên môi trường Java 1.7 nữa. Nếu tôi cố gắng sử dụng SortedList <T> với một thời gian chạy 1.7, tôi nhận được:
Problem:
Error: Unresolved compilation problems:
The import java.util.Spliterator cannot be resolved
Spliterator cannot be resolved to a type
com.xxxx.xxxx.util.SortedList.<init>(SortedList.java:13)
Lỗi này là khá rõ ràng, kể từ bây giờ chúng tôi đã ghi đè phương pháp spliterator() trong SortedList <T> nó cần phải bao gồm java.util.Spliterator, nhưng điều đó không tồn tại trong 1.7.
Lý tưởng nhất là chúng tôi KHÔNG yêu cầu khách hàng của chúng tôi cập nhật lên Java 1.8 nếu họ không muốn.
Bàn tay của chúng tôi có bị ép buộc ở đây không? Chúng ta có cần buộc người dùng cập nhật lên 1.8 và cũng tung ra phiên bản mới cho bất kỳ người dùng nào đã tự cập nhật lên 1.8 không?
Có ai biết cách giải quyết vấn đề này không?
Trên một lưu ý mang tính triết học hơn, tại sao Giao diện bị hỏng với việc thực hiện :-(Có thể là một tính năng mới tiện lợi, nhưng họ thực sự nên tránh làm bất cứ điều gì dẫn đến vi phạm các thay đổi đối với mã hiện có, đặc biệt là một số điều cơ bản như danh sách/bộ sưu tập, v.v.
Bất kỳ trợ giúp hoặc đề xuất nào về tình trạng khó khăn này sẽ được đánh giá cao.
Chúc mừng,
Đánh dấu
Từ 'Bộ sưu tập '* mở rộng *' Iterable ' nên có bao giờ là một “phương pháp trùng lặp” lỗi như vậy . Đó là một chỉ báo cho trình biên dịch bị hỏng. Hãy ghi nhớ rằng [bạn cần một trình biên dịch nhận biết Java 8 khi sử dụng các lớp Java 8 ngay cả khi bạn không sử dụng nguồn Java 8/mức mục tiêu] (http://stackoverflow.com/a/26105217/2711488). –
Holger
Hmm, nghĩ rằng chúng tôi đã có tất cả những thứ mà mọi thứ được sắp xếp, sẽ phải gấp ba lần kiểm tra và thử lại. Cám ơn vì sự gợi ý. – Gumbatron