Dưới đây là mã xác định loại enum.Trong java, loại enum như thế nào biên dịch?
enum Company{
EBAY(30), PAYPAL(10), GOOGLE(15), YAHOO(20), ATT(25);
private int value;
private Company(int value){
super(this.name());
this.value = value;
}
public int getValue(){
return value;
}
}
đó được nội biên soạn để,
final class Company extends Enum<Company>{
public final static Company EBAY = new Company(30);
public final static Company PAYPAL = new Company(10);
public final static Company GOOGLE = new Company(15);
public final static Company YAHOO = new Company(20);
public final static Company ATT = new Company(25);
private int value;
private Company(int value){
super(this.name(),Enum.valueOf(Company.class, this.name()));
this.value = value;
}
public int getValue(){
return value;
}
}
là hiểu biết của tôi có đúng không?
'lớp Công ty' không thể phân lớp rõ ràng' lớp java.Lang.Enum'? Tôi không hiểu bạn. Các phương thức như 'ordinal()'/'values ()' có thể nhìn thấy như thế nào đối với các đối tượng kiểu 'class Company' mà không có subclassing? – overexchange
@overexchange Nó không phân lớp 'java.lang.Enum' bạn có thể xác nhận nó bằng cách xem bytecode, tuy nhiên bạn không thể phân lớp' java.lang.Enum' ** mình **; điều này đơn giản sẽ không biên dịch như tôi đã giải thích. Mở rộng này được thêm vào bởi trình biên dịch. –
Bạn có thể tạo một lớp mở rộng 'Enum', nếu bạn sử dụng trình biên dịch cũ hơn… – Holger