我创建了一个代码,必须将ContentDataType
转换为MIME
类型。例如,ContentDataType
就像String
一样简单ImageJPEG
,现在我使用MediaType.IMAGE_JPEG_VALUE
将其转换为image/jpeg
。但是我用switch来做这件事。这是一个代码:
public static String createContentType(ContentDataType contentDataType) {
String contentType;
switch (contentDataType) {
case IMAGE_JPG:
contentType = MediaType.IMAGE_JPEG_VALUE;
break;
//next media types
}
return contentType;
}
这样做有什么更好,更优雅的方法?我不想使用if
,但也许有些多态?你能给我一些提示吗?
答案 0 :(得分:3)
如果您准备只使用一个if/else
,您可以执行以下操作:
private static Hashtable<String, String> types = new Hashtable<>();
static{
types.put(IMAGE_JPG, MediaType.IMAGE_JPEG_VALUE);
types.put(IMAGE_PNG, MediaType.IMAGE_PNG_VALUE);
types.put(IMAGE_XXX, MediaType.IMAGE_XXX_VALUE);
}
public static String createContentType(ContentDataType contentDataType) {
if types.containsKey(contentDataType)
return types.get(contentDataType);
else
throw new RuntimeException("contentDataType not supported");
}
}
这允许您将新支持的类型添加到Hashtable whitout中,该类型必须处理一长串if/else if/else
。
答案 1 :(得分:1)
此类操作应使用Enum。
如果您拥有ContentDataType的所有已知可能选项,则为其创建枚举。
然后您可以存储字符串以及MIME类型。如下,
enum ContentDataType{
IMAGE_JPG("ImageJPG", "image/jpg"),
IMAGE_GIF("ImageGIF", "image/gif");
String contentType;
String mimeType;
ContentDataType(String contentType, String mimeType){
this.contentType = contentType;
this.mimeType = mimeType;
}
}
或者您可以使用MimeType对象以及
import com.google.common.net.MediaType;
enum ContentDataType{
IMAGE_JPG("ImageJPG", MediaType.JPEG),
IMAGE_GIF("ImageGIF", MediaType.GIF);
public String contentType;
public MediaType mimeType;
ContentDataType(String contentType, MediaType mimeType){
this.contentType = contentType;
this.mimeType = mimeType;
}
}