I’m new to Java and I have come to having the following problem:
I have created several classes which all implement the interface “Parser”. I have a JavaParser, PythonParser, CParser and finally a TextParser.
I’m trying to write a method so it will take either a File or a String (representing a filename) and return the appropriate parser given the extension of the file.
Here is some psuedo-code of what I’m basically attempting to do:
public Parser getParser(String filename)
{
String extension = filename.substring(filename.lastIndexOf("."));
switch(extension)
{
case "py": return new PythonParser();
case "java": return new JavaParser();
case "c": return new CParser();
default: return new TextParser();
}
}
In general, is this the right way to handle this situation? Also, how should I handle the fact that Java doesn’t allow switching on strings? Should I use the .hashcode() value of the strings?
I feel like there is some design pattern or something for handling this but it eludes me. Is this how you would do it?
This is called the Factory method pattern and it seems like a pretty good way to handle your problem. One way you can get around the “Java doesn’t allow switching on strings” problem is by using an
if…elsestatement.