Xin xem Java Enum definition và Why in java enum is declared as Enum<E extends Enum<E>> để thảo luận chung. Ở đây tôi muốn tìm hiểu chính xác những gì sẽ được chia (không an toàn kiểu nữa, hoặc yêu cầu phôi thêm vv) nếu lớp Enum được định nghĩa làĐiều gì sẽ là khác nhau trong Java nếu khai Enum không có phần đệ quy
public class Enum<E extends Enum>
Tôi đang sử dụng mã này để thử nghiệm ý tưởng của tôi:
interface MyComparable<T> {
int myCompare(T o);
}
class MyEnum<E extends MyEnum> implements MyComparable<E> {
public int myCompare(E o) { return -1; }
}
class FirstEnum extends MyEnum<FirstEnum> {}
class SecondEnum extends MyEnum<SecondEnum> {}
Tôi không thể tìm thấy bất kỳ lợi ích nào trong trường hợp chính xác này.
PS. thực tế là tôi không được phép để làm
class ThirdEnum extends MyEnum<SecondEnum> {}
khi MyEnum được định nghĩa với đệ quy là
a) không có liên quan, bởi vì với sự đếm thực bạn không được phép để làm điều đó chỉ vì bạn không thể mở rộng enum chính mình
b) không đúng - hãy thử nó trong trình biên dịch và thấy rằng thực tế có thể biên dịch w/o bất kỳ lỗi nào
PPS. Tôi ngày càng có khuynh hướng tin rằng câu trả lời đúng ở đây sẽ là "không có gì thay đổi nếu bạn loại bỏ phần đệ quy" - nhưng tôi không thể tin được.
chỉ là một lưu ý nhỏ, 'o.util2 (this)' sẽ không biên dịch vì đây được coi là MyEnum không E. Bạn có thể thêm tham số thứ hai 'E o1' và gọi' o.util2 (o1) 'mặc dù cho cùng một hiệu ứng: nó sẽ biên dịch với 'E mở rộng MyEnum ', nhưng không phải với 'E mở rộng MyEnum >' –
Cảm ơn bạn, tôi vừa sửa lỗi đó. –
cảm ơn bạn! mã đó thực sự được đánh dấu là không an toàn nếu bạn loại bỏ đệ quy! Bạn có biết cách sử dụng thực tế của tính năng đó trong jdk không? – atamur