1

確かにすでに尋ねられて申し訳ありませんが、必要なものが見つかりませんでした
。いくつかのメッセージタイプがあります。

class AbstractMessage {
    int code;
    String token;
}

class ShareMessage extends AbstractMessage{
    String user;
    Map<String, String> friends;
}

class PostMessage extends AbstractMessage{
    String user;
    Map<String, String> data;
}

そして、json投稿メッセージからそれらをデコードする方法:

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<PostMessage>() {}.getType();
PostMessage m = (PostMessage) getMessage(request.getReader(), dataType);

動作しますが、醜いです。パラメータ化されたgetMessage関数、またはObjectを返して
thxをキャストするよりも優れた関数を使用するにはどうすればよいですか。

4

1 に答える 1

1

<T>戻り型の直前のメソッドシグネチャに追加します。これにより、型パラメーター化されたメソッドが作成されます。

public <T> T getMessage(BufferedReader r, TypeToken<T> 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<PostMessage>() {});
于 2012-07-01T20:33:27.363 に答える