Tôi đang cố gắng triển khai chú thích @IntDef
trong phát triển Android.Android - Có ok để đặt các giá trị @IntDef bên trong @interface không?
Đầu tiên Phương pháp: nó trông tuyệt vời với định nghĩa tách ra trong một lớp học Constant.java
:
public class Constant {
@IntDef(value={SORT_PRICE, SORT_TIME, SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortType{}
public static final int SORT_PRICE = 0;
public static final int SORT_TIME = 1;
public static final int SORT_DURATION = 2;
}
Cách sử dụng:
@Constant.SortType int sortType = Constant.SORT_PRICE;
Nhưng mọi thứ trở nên một hỗn độn rất nhiều khi có nhiều định nghĩa (ví dụ như loại người dùng , StoreType, vv) trong một tệp.
Second Phương pháp: Vì vậy, tôi đã đưa ra một cái gì đó như thế này để các giá trị riêng biệt giữa định nghĩa:
public class Constant {
@IntDef(value={SortType.SORT_PRICE, SortType.SORT_TIME, SortType.SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortTypeDef{}
public static class SortType{
public static final int PRICE = 0;
public static final int TIME = 1;
public static final int DURATION = 2;
}
}
Cách sử dụng:
@Constant.SortTypeDef int sortType = Constant.SortType.PRICE;
Nhưng như bạn thấy, tôi đã tạo ra hai tên khác nhau cho nó: SortTypeDef
và SortType
Thứ ba Hod: Tôi cố gắng để di chuyển danh sách các giá trị có thể bên trong @interface
:
public class Constant {
@IntDef(value={SortType.SORT_PRICE, SortType.SORT_TIME, SortType.SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortType{
int PRICE = 0;
int TIME = 1;
int DURATION = 2;
}
}
Cách sử dụng
@Constant.SortType int sortType = Constant.SortType.PRICE;
Trong khi nó không làm việc, tôi không biết nhược điểm là gì. Bạn có thể đặt các giá trị có thể có của @IntDef
bên trong @interface
không? Có bất kỳ khác biệt hiệu suất nào trong ba phương pháp trên không?
Bạn đã tìm thấy một giải pháp cho câu hỏi này? Tôi đang tự hỏi bây giờ ... –
@IgorGanapolsky chưa, nhưng tôi đang tiếp tục sử dụng phương pháp thứ ba trên mã sản xuất và cho đến nay không có vấn đề gì. Tôi nghĩ cách tốt nhất để kiểm tra là bằng cách lược tả (sử dụng, số lượng hằng số, v.v.). –
Chú thích IntDef chỉ có RetentionPolicy.SOURCE và do đó chỉ được sử dụng bởi bộ xử lý chú thích trình biên dịch. Nó không thể cho nó có ảnh hưởng đến hiệu suất thời gian chạy trừ khi bộ xử lý chú thích đang làm điều gì đó rất bí truyền, chẳng hạn như sử dụng việc dệt bytecode hoặc tạo mã để chèn kiểm tra thời gian chạy vào mã của bạn. –