Tôi muốn hợp nhất các thông báo lỗi và nội dung của mình thành một tệp và làm cho mã của tôi dễ đọc hơn nếu có thể.Sử dụng liệt kê để đại diện cho các thông báo lỗi một cách hợp pháp - đó có phải là thực hành tốt không?
Dưới đây là một ví dụ về những gì tôi có trong tập tin enum của tôi:
public enum ZipErrorType {
// START: define exception messages (alphabetical order)
EMPTY_FILE_NAME_IN_LIST {
public String toString() {
return "One or more null/empty filename(s) found";
}
},
FILE_DOESNT_EXIST {
public String who(String sThisFile) {
return "[" + sThisFile + "] does not exist";
}
},
FILE_LIST_IS_NULL {
public String toString() {
return "File list is null/empty";
}
},
FILENAME_NOT_ABSOLUTE {
public String who(String sThisFile) {
return "[" + sThisFile + "] is not absolute";
}
},
MUST_BE_DIR {
public String who(String sThisFile) {
return "[" + sThisFile + "] must be a directory";
}
},
MUST_BE_FILE {
public String who(String sThisFile) {
return "[" + sThisFile + "] must be a file";
}
},
NULL_OR_EMPTY {
public String who(String sThisFile) {
return "[" + sThisFile + "] is null/empty";
}
},
OUTPUT_FILE_ALREADY_EXISTS {
public String who(String sThisFile) {
return "[" + sThisFile + "] already exists";
}
},
OUTPUT_FILENAME_EMPTY {
public String toString() {
return "Output filename is null/empty";
}
},
OUTPUT_PATH_EMPTY {
public String toString() {
return "Output path is null/empty";
}
},
// END: define exception messages
NONE {};
public String who(String sThisFile) { return ""; }
}
Sau đó, trong chương trình của tôi, tôi có mã như:
private static ZipErrorType getFileErrorsIfAny(String sFilename, boolean shouldBeFile) {
// check if given filename is absolute
File file = new File(sFilename);
if (!file.isAbsolute()) {
return ZipErrorType.FILENAME_NOT_ABSOLUTE;
}
// check if file exists
if (!file.exists()) {
return ZipErrorType.FILE_DOESNT_EXIST;
}
// check if corresponding file is a file when it shouldn't be...
if (file.isFile() && !shouldBeFile) {
return ZipErrorType.MUST_BE_DIR;
}
// ...or a directory when it should be a file
else if (file.isDirectory() && shouldBeFile) {
return ZipErrorType.MUST_BE_FILE;
}
return ZipErrorType.NONE;
}
... và một ví dụ về làm thế nào tôi sử dụng của enum của tôi:
// check input files
for (String sFile : files) {
if (sFile == null || sFile.trim().length() == 0) {
throw new NullPointerException("One or more filename is null/empty");
}
errorIfAny = getFileErrorsIfAny(sFile.trim(), true);
if (!errorIfAny.equals(ZipErrorType.NONE)) {
throw new ZipInputException(errorIfAny.who(sFile.trim()));
}
}
Bây giờ tôi biết rất khó để đánh giá chỉ bằng những đoạn mã này một mình, nhưng điều này có ổn không, từ một địa lý quan điểm neral? Là những gì tôi đang làm không có giá trị rắc rối, và có cách nào để cải thiện điều này?
Cân nhắc đăng câu hỏi này lên http://codereview.stackexchange.com/. Có vẻ như bạn không có bất kỳ vấn đề hoặc câu hỏi nào, nhưng chỉ cần xem xét ngang hàng. – mthmulders
Tôi không chắc liệu nó có tốt hơn hay không, nhưng trong dự án hiện tại của chúng tôi, chúng tôi đang sử dụng enums theo cùng một cách ... nhưng Chuỗi được trả về bởi mỗi một chỉ là một mã định danh được sử dụng cho i18n –