Use enumerations to represent error messages – is this a good habit?
•
Java
I want to combine my error messages and content into one file and make my code as readable as possible
This is my example in the enumeration file:
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 ""; } }
Then in my program, I have the following code:
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; }
... and an example of how I use my enumeration:
// 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())); } }
Now I know it's hard to judge by these code fragments alone, but from a general point of view, is this normal? What I'm doing is not worth the trouble. Is there any way to improve this?
Solution
I recommend using simple string templates instead of enumerations to build error messages
String EMPTY_FILE_NAME_IN_LIST_TEMPLATE = "One or more null/empty filename(s) found"; String FILE_DOESNT_EXIST_TEMPLATE = "[ %s ] does not exist"; String FILE_LIST_IS_NULL_TEMPLATE = "File list is null/empty"; String FILENAME_NOT_ABSOLUTE_TEMPLATE = "[ %s ] is not absolute"; String MUST_BE_DIR_TEMPLATE = "[ %s ] must be a directory"; String MUST_BE_FILE_TEMPLATE = "[ %s ] must be a file"; String NULL_OR_EMPTY_TEMPLATE = "[ %s ] is null/empty"; String OUTPUT_FILE_ALREADY_EXISTS_TEMPLATE = "[ %s ] already exists"; String OUTPUT_FILENAME_EMPTY_TEMPLATE = "Output filename is null/empty"; String OUTPUT_PATH_EMPTY_TEMPLATE = "Output path is null/empty";
Then, use string Format (template, sfilename) builds the actual message
You can also consider throwing an exception from the getfileerrorsifany() method:
File file = new File(sFilename); if (!file.isAbsolute()) { throw new ZipInputException(String.format(FILENAME_NOT_ABSOLUTE_TEMPLATE,sFilename)); }
It looks cleaner and more compact to me
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码