将Object对象作为方法参数传递是否可以

时间:2011-07-16 16:32:00

标签: java json generics gson

我正在编写一个使用Google Gson将Object转换为JSON的快速方法。这很简单,但我希望集中我的JSON构建过程,以防我想进行进一步的更改:

public static String buildJSONObject(Object obj) {
    Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
    return gson.toJson(obj);
}

现在我有两个问题(有效),

- 使用Object okay作为方法参数,还是使用Generics有更好的方法?

- 如果不断地将对象转换为传递给方法的任何类型的对象,是否存在性能开销?

2 个答案:

答案 0 :(得分:1)

  

使用Object okay作为方法参数,还是使用Generics有更好的方法?

泛型提供类型安全性和更好的显示意图,从而使代码更清晰。话虽如此,当你知道要传递给方法的对象类型并且你已经建立了某种对象层次结构时,它们实际上只提供了这些好处,你可以扩展所有的JSON'able对象。如果你真的希望能够将太阳下的任何物体变成JSON,那么Object obj就是你的选择。

  

如果不断地将对象转换为传递给方法的任何类型的对象,是否存在性能开销?

铸造没有性能问题。您应该担心的是类型安全和来自无效转换的RuntimeExceptions。如果您确定要进入方法的对象类型,请注意进行强制转换。您可以随时使用instanceof检查进行安全演员,这样可以减少问题。

答案 1 :(得分:0)

您是否希望能够将任何类型的对象传递给该方法?如果是,则参数类型应为Object。这里的所有都是它的。泛型只在实际执行诸如约束输入类型之类的内容时提供值,以便您可以调用某些方法,确保方法的多个参数以某种特定方式相关或确保输出类型与输入相关以某种方式输入等等。在这种情况下,通用参数不会提供Object没有的任何内容。

你当然不应该担心任何开销(反正可能没有)。如果您想担心开销,请担心如何在每次调用方法时创建GsonBuilder的新实例来创建Gson的新实例,当您可以重用单个时Gson对象。