Trước hết, tôi muốn di chuyển "chứa "phương thức (hoặc tương đương của nó) với chính enum bằng cách định nghĩa phương thức isModifier.
public static enum DataValueModifier {
...
public boolean isModifier(String modifierString)
{
return modifierString != null && value.equals(modifierString);
}
}
Sau đó, mã của bạn trông giống như thay vì điều này:
if (DataValueModifier.EQUAL.isModifier(dataValue))
{
//...
}
Nhưng, quan trọng hơn, tại sao bạn đang sử dụng dataValue thay vì enum ở nơi đầu tiên? Nếu bạn đang nhận được đầu vào dòng lệnh hoặc một cái gì đó hoặc phân tích cú pháp một phương trình chuỗi và sau đó cần phải tìm ra biểu thức tôi đoán tôi hiểu. Nhưng nếu bạn có quyền kiểm soát của mã sau đó bạn chỉ nên bắt đầu với enum và bạn sẽ có thể nói
if (dataValueEnum == DataValueModifier.EQUAL) {
{
//...
}
Tôi cũng cân nhắc việc thêm một phương pháp tĩnh để enum có thể chuyển đổi một chuỗi trao cho các giá trị enum chính xác. Nó không phải là khá hiệu quả, có lẽ, nhưng trừ khi bạn thực sự quan tâm về hiệu quả nó sẽ làm cho mã của bạn sạch hơn nhiều. Vì vậy, thêm phương pháp này để enum của bạn:
public static DataValueModifier toDataValueModifier(String dataValue) {
if(EQUAL.isModifier(dataValue) {
return EQUAL;
} else if(GREATER_THAN.isModifier(dataValue) {
return GREATER_THAN;
} else if...
// Do this for all possible values
} else {
return UNKNOWN;
// Also, add an UNKNOWN to your list of enum values.
}
}
Các isModifier
và toDataValueModifier
phương pháp có thể thêm vào một chút mã xấu xí để enum DataValueModifier của bạn, nhưng tất cả các mã khác của bạn sẽ trông tuyệt vời. Bây giờ bạn có thể làm một cái gì đó như thế này:.
DataValueModifier dataValueEnum = DataValueModifier.toDataValueModifier(dataValue);
if (dataValueEnum == DataValueModifier.EQUAL) {
...
}
hoặc thậm chí
switch(DataValueModifier.toDataValueModifier(dataValue)) {
case EQUAL:
// ...
break;
case GREATER_THAN:
// ...
break;
case GREATER_EQUAL:
// ...
break;
// ... define all the cases you want
case UNKNOWN:
default:
// ...
}
bạn nên so sánh nó như 'DataValueModifier.EQUAL.getValue() equals (dataValue)' và Enums là tốt hơn cho một cái gì đó như các ngày trong tuần ('Day.MONDAY, Day.TUESDAY và on) và thực hiện so sánh chuyển đổi. –
có vẻ ổn với tôi - Tôi đã thiết lập nó như Paul nói dưới đây, nhưng nếu không nó rõ ràng và không nhìn tất cả những ngớ ngẩn ... –
Tôi giả sử dataValue là một String? Nếu vậy, bạn sẽ có thể ghi đè 'DataValueModifier.toString()' và chỉ làm điều này: 'dataValue.contains (DataValueModifier.EQUAL) ' Nếu bạn cũng nhập tĩnh như Paul gợi ý, nó sẽ biến thành' dataValue.contains (EQUAL) ' – KJP