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() {});