gson:根据类型从json参数化

对不起它肯定已被问到,但我找不到我需要的东西
我有几种消息类型:

class AbstractMessage { int code; String token; } class ShareMessage extends AbstractMessage{ String user; Map friends; } class PostMessage extends AbstractMessage{ String user; Map data; } 

以及从json post消息中解码它们的方法:

 public Object getMessage(BufferedReader r, Type t){ Object o = null; try{ o = g.fromJson(r, t); } catch (final JsonSyntaxException e) { LOGGER.info("Error in Json format", e); } catch (final JsonParseException e) { LOGGER.info("Error in parsing Json", e); } return o; } 

然后例如:

 Type dataType = new TypeToken() {}.getType(); PostMessage m = (PostMessage) getMessage(request.getReader(), dataType); 

工作,但它很难看,我怎么能有一个参数化的getMessage函数,或者比返回Object和cast更好的东西
谢谢

在返回类型之前立即将添加到方法签名。 这将创建一个类型参数化方法:

 public  T getMessage(BufferedReader r, TypeToken typeToken){ try { return g.fromJson(r, typeToken.getType()); } catch (final JsonSyntaxException e) { LOGGER.info("Error in Json format", e); } catch (final JsonParseException e) { LOGGER.info("Error in parsing Json", e); } return null; } 

这样叫:

 PostMessage m = getMessage(request.getReader(), new TypeToken() {});