Nếu tôi có một đối tượng enum, nó được coi là một nguyên thủy hoặc một tài liệu tham khảo?Các enums Java có được coi là các kiểu nguyên thủy hay tham chiếu không?
Trả lời
Đây là loại tham chiếu.
Không giống như nhiều ngôn ngữ, trong đó enum
là tập hợp các dấu tách rời, Java enums là trường hợp đối tượng bất biến. Bạn có thể lấy giá trị số của một cá thể enum bằng cách gọi ordinal()
.
Bạn thậm chí có thể thêm các thành viên của riêng bạn để lớp enum, như thế này:
public enum Operation {
PLUS { double eval(double x, double y) { return x + y; } },
MINUS { double eval(double x, double y) { return x - y; } },
TIMES { double eval(double x, double y) { return x * y; } },
DIVIDE { double eval(double x, double y) { return x/y; } };
// Do arithmetic op represented by this constant
abstract double eval(double x, double y);
}
//Elsewhere:
Operation op = Operation.PLUS;
double two = op.eval(1, 1);
+1 Tôi hoàn toàn không biết về chức năng này. Bạn có thể cung cấp một ví dụ về cách sử dụng hoạt động đó trong hành động không? – corsiKa
'trường hợp enum' không phải là bất biến thực sự. Một enum có thể có các biến có thể thay đổi. – sepp2k
@glowcoder: 'Operation.PLUS.eval (1, 1)' – SLaks
This article chủ yếu chỉ cho bạn cách đếm được thực hiện, và như SLaks nói, họ là tài liệu tham khảo.
Các enums cách làm việc thực sự là không quá khác biệt so với cách họ đã được sử dụng trước khi giới thiệu họ với Java 5:
public final class Suit {
public static final Suit CLUBS = new Suit();
public static final Suit DIAMONDS = new Suit();
public static final Suit HEARTS = new Suit();
public static final Suit SPADES = new Suit();
/**
* Prevent external instantiation.
*/
private Suit() {
// No implementation
}}
By instantiating bộ quần áo khác nhau trên lớp bốc nó được đảm bảo rằng chúng sẽ được loại trừ lẫn nhau và các nhà xây dựng tư nhân đảm bảo rằng không có trường hợp thêm sẽ được tạo ra.
Đây có thể so sánh thông qua == hoặc bằng.
Java 5 enum hoạt động khá nhiều theo cùng một cách, nhưng với một số tính năng cần thiết để hỗ trợ serialization, vv
Tôi hy vọng nền tảng này làm sáng tỏ hơn nữa.
Enums là các kiểu tham chiếu, trong đó chúng có thể có các phương thức và có thể được thực thi từ dòng lệnh, nếu chúng có phương thức chính.
Xem sau "Planet" ví dụ từ Sun/Oracle
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
- 1. ToString có được gọi cho các kiểu nguyên thủy không?
- 2. Việc sử dụng tham chiếu const đi tới các kiểu nguyên thủy là gì?
- 3. Số nguyên là kiểu nguyên thủy
- 4. Sự khác biệt giữa các loại nguyên thủy và tham chiếu là gì?
- 5. Kiểu tham chiếu số nguyên trong C# là gì?
- 6. Chuỗi có phải là kiểu nguyên thủy không?
- 7. Các kiểu cấu trúc và nguyên thủy
- 8. Tại sao enums được coi là loại hợp chất?
- 9. Tại sao các tham chiếu vòng tròn được coi là có hại?
- 10. Các đối tượng COM động có được coi là tài nguyên được quản lý không?
- 11. Kiểu nguyên thủy vs Kiểu đối tượng trong Java
- 12. Xác định các kiểu nguyên thủy trong các mẫu
- 13. Các thành viên thực thể có nên là các kiểu dữ liệu nguyên thủy hoặc các kiểu dữ liệu java không?
- 14. Tôi có cần biến động cho các biến của các kiểu tham chiếu không?
- 15. Java: Sao chép mảng của kiểu không nguyên thủy
- 16. Các bản đồ STL có khởi tạo các kiểu nguyên thủy khi chèn không?
- 17. Cách phân biệt tham chiếu so với kiểu nguyên thủy và giá trị
- 18. Có phải các phôi nguyên thủy kiểu số nguyên Java "mũ" ở MAX_INT của loại truyền không?
- 19. Java nguyên thủy có bất biến không?
- 20. Tại sao Java Generics không hỗ trợ các kiểu nguyên thủy?
- 21. Guid có được coi là loại giá trị hoặc loại tham chiếu không?
- 22. Các kiểu dữ liệu nguyên thủy có an toàn trong Java
- 23. java: mảng nguyên thủy - chúng có được khởi tạo không?
- 24. Sử dụng các kiểu nguyên thủy với ClassLoader
- 25. Loại Biến tần bị hỏng cho các kiểu nguyên thủy?
- 26. Rails ActiveRecord và mảng các kiểu nguyên thủy
- 27. Null cho các kiểu dữ liệu nguyên thủy
- 28. Cách gửi đa phương thức trên các kiểu nguyên thủy?
- 29. Java Reflection gọi constructor với các loại nguyên thủy
- 30. Việc truyền dữ liệu nguyên thủy bằng cách tham chiếu trong Java
Enums là lớp học hoàn toàn bình thường w/một số tối ưu hóa (serialization) + kiểm tra c-tor cho cấp thừa kế + mảng chia sẻ thêm (không nhân bản()) của các enums được khai báo. Giá trị phương thức công khai() luôn trả về một bản sao mới. Họ có thể thực hiện các giao diện và những gì không :) – bestsss