Vì enums không phải là kiểu nguyên thủy, cách hiệu quả nhất để vượt qua enum thông qua giao diện aidl trong Android là gì? Có cách nào để chuyển đổi enum thành một thứ tự đầu tiên?Truyền thông qua các giao diện trợ giúp
Trả lời
Các loại nguyên thủy, khác với
String
, yêu cầu chỉ báo định hướng. Chỉ báo chỉ đường bao gồmin
,out
vàinout
.
Hãy nhìn vào các tài liệu chính thức cho rằng: http://developer.android.com/guide/developing/tools/aidl.html#aidlsyntax
Ngoài ra, bạn có thể xem xét thông qua các chuỗi hoặc đại diện thứ tự của enum và dịch nó trở lại khi cần thiết. Này được lấy từ phiên bản thứ 2 Java hiệu quả:
// Implementing a fromString method on an enum type
private static final Map<String, Operation> stringToEnum = new HashMap<String, Operation>();
static { // Initialize map from constant name to enum constant
for (Operation op : values())
stringToEnum.put(op.toString(), op);
} // Returns Operation for string, or null if string is invalid
public static Operation fromString(String symbol) {
return stringToEnum.get(symbol);
}
Trong trường hợp trên, Operation
là một enum
.
Để có được thứ tự của một enum xem xét ví dụ sau:
public enum Badges{
GOLD, SILVER, BRONZE;
}
// somewhere else:
int ordinal = Badges.SILVER.ordinal();// this should be 1
Bạn cũng nên xem xét tránh hoàn toàn enums (trong một dự án Android), nếu bạn có thể giúp nó. http://developer.android.com/guide/practices/design/performance.html#avoid_enums –
Rất tiếc, tôi không có tùy chọn tránh né enums; đây là một dự án cộng tác. Tôi có thể trích xuất thứ tự của một giá trị enum? – Phillip
Có, bạn có thể. Hãy để tôi chỉnh sửa câu hỏi. – Cristian
tôi chỉ đơn giản sử dụng
String enumString = myEnum.name()
(với MyEnum như enum và MyEnum như giá trị) để có được những đại diện chuỗi và sau đó
MyEnum myEnum = MyEnum.valueOf(enumString)
để tái tạo lại enum từ biểu diễn String.
Sử dụng các thiết bị đầu cuối có thể nhanh hơn một chút nhưng nếu tôi có thể thêm Enums sau, điều này có nhiều khả năng phá vỡ mã cũ hơn.
// Edit: Theo tôi không muốn có String như kiểu trả về, bây giờ tôi thực hiện Parcellable như đề cập ở đây: Passing enum or object through an intent (the best solution)
nhập khẩu android.os.Parcel; nhập android.os.Parcelable;
enum InitResponse implements Parcelable {
// Everything is fine.
SUCCESS,
// Something else
FOO;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(final Parcel dest, final int flags) {
dest.writeString(name());
}
public static final Creator<InitResponse> CREATOR = new Creator<InitResponse>() {
@Override
public InitResponse createFromParcel(final Parcel source) {
return InitResponse.valueOf(source.readString());
}
@Override
public InitResponse[] newArray(final int size) {
return new InitResponse[size];
}
};
}
Tôi bây giờ đã kết thúc việc kết hợp cách tiếp cận này với việc thực thi Parcellable từ http://stackoverflow.com/questions/2836256/passing-enum-or-object-through-an-intent-the-best-solution dẫn đến mã đã chỉnh sửa ở trên. – domenukk
- 1. Thuộc tính giao diện gốc không thể truy cập được qua giao diện cha trong trình trợ giúp Html
- 2. Giao diện người dùng - Inline Trợ giúp Lớp phủ
- 3. Trợ giúp! Cách tạo một thông số kỹ thuật giao diện người dùng
- 4. Trợ giúp giao diện người dùng cho Thông báo trên biểu tượng
- 5. django ManyToMany qua trợ giúp
- 6. Chia sẻ luồng đầu ra thông qua giao diện JNI
- 7. lặp qua danh sách các giao diện
- 8. Sử dụng các phương thức trợ giúp như html_escape trong giao diện điều khiển đường ray
- 9. Nhận thuộc tính chuỗi trợ giúp được áp dụng cho các thuộc tính C# được hiển thị thông qua giao diện COM
- 10. LINQ to Entities thông qua thuộc tính giao diện
- 11. Cần trợ giúp về HL7
- 12. thông báo các phương thức giao diện được thực hiện thông qua __call?
- 13. Tại sao truyền tới giao diện?
- 14. Trợ giúp và Thông tin về Lập trình hướng Aspect
- 15. Truyền Giao diện trong Dịch vụ WCF?
- 16. truyền loại ẩn danh sang giao diện?
- 17. Thêm thông báo "trợ giúp" vào các trường
- 18. Truyền ActionView :: Người trợ giúp :: FormBuilder đến một phần
- 19. Truyền phương thức của Giao diện làm tham số
- 20. truyền một vector giữa các hàm thông qua con trỏ
- 21. android-studio không thể tìm thấy giao diện trợ giúp để sử dụng trong lớp
- 22. SystemVerilog: Truyền các giao diện cho các chức năng/nhiệm vụ (để tổng hợp!)
- 23. Trợ giúp triển khai mẫu thông số kỹ thuật
- 24. Làm cách nào để triển khai các sự kiện thông qua giao diện trong C#?
- 25. Truyền một giao diện đến giao diện khác mà nó không kế thừa
- 26. Chức năng trợ giúp giao nhau đường dây OpenCV 2d
- 27. Sử dụng lớp HelpProvider để hiển thị trợ giúp, giao diện người dùng luôn ở phía sau cửa sổ trợ giúp
- 28. Java - Collection.Sort qua giao diện Objects
- 29. Truyền thông báo lỗi qua flash
- 30. Bạn có thể truyền EntityManagers được tiêm vào các lớp trợ giúp của bean EJB và sử dụng nó không?
Hãy xem nhận xét của Charlie Collins. Điều đó hoàn toàn đúng: tránh enums càng nhiều càng tốt. – Cristian
@Cristian cần được thực hiện bằng một hạt muối. enums là thiết kế tốt. có một lý do tại sao Android không loại bỏ enums từ ngôn ngữ. –
Đó là anh chàng thực sự. Tuy nhiên, tôi nghĩ rằng họ đã không di chuyển nó bởi vì nó không phải là dễ dàng. Họ vẫn sử dụng 'javac' trước khi dexing bytecode. Dù sao ... Tôi yêu enums, và sử dụng chúng khi họ làm cho mọi thứ rõ ràng và thanh lịch. – Cristian