【问题标题】:Is it okay to pass an Object object as method argument可以将 Object 对象作为方法参数传递吗
【发布时间】:2011-07-16 16:31:59
【问题描述】:

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

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

现在我对此有两个问题(可行),

-使用 Object 作为方法参数是否可行,或者是否有更好的方法使用泛型?

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

【问题讨论】:

  • 泛型会给你带来编译时类型安全的好处,所以是的,如果你知道在什么类型上使用这个方法可能会更好。

标签: java json generics gson


【解决方案1】:

是否可以使用 Object 作为方法参数,或者是否有更好的方法使用泛型?

泛型提供类型安全性并更好地显示意图,从而产生更简洁的代码。话虽如此,当您知道要传递给该方法的对象类型并且您已经建立了某种对象层次结构并从中扩展了所有 JSON 对象时,它们才真正提供这些好处。如果您真的希望能够将阳光下的任何对象转换为 JSON,Object obj 是您的最佳选择。

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

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

【讨论】:

    【解决方案2】:

    您希望能够将任何类型的对象传递给方法吗?如果是,则参数类型应为Object。这里的所有都是它的。泛型仅在它们实际执行某些操作时提供价值,例如约束输入类型,以便您可以在其上调用某些方法,确保方法的多个参数以某种特定方式相关或确保输出类型与输入相关以某种方式输入,等等。在这种情况下,泛型参数不会提供 Object 所不提供的任何东西。

    而且您当然不应该担心由此产生的任何开销(反正可能没有)。如果您想担心开销,请担心每次调用方法时如何创建 GsonBuilder 的新实例以创建 Gson 的新实例,而您可能只是重用单个 Gson 对象.

    【讨论】:

    • 我实际上是在使用静态字段来存储 GsonBuilder,但我想展示我是如何到达 gson 位的,以防它有所作为。但是,您说这让我看到了我刚刚使用 JetS3t 实用程序所做的其他事情,我修复了它,谢谢。
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多