【问题标题】:Passing Any Type As A Method Parameter [duplicate]将任何类型作为方法参数传递
【发布时间】:2015-07-02 04:48:20
【问题描述】:

我正在尝试一种可以将任何类型作为参数(Object、int、boolean、ArrayList 等)的方法。这是一个非常简单的方法来说明它将尝试做什么:

public void printAnything(Type arg0) {
    System.out.println(arg0);
}

我要问的是,在那个方法中用什么代替 Type

【问题讨论】:

  • @Trobbins 小心。泛型不支持原始类型。
  • @Luig 你说得对,谢谢提醒。
  • 我不确定,但我认为 Object 应该可以完成这项工作,因为每个对象都派生自 Object 并且每个普通类型(int、boolean、...)都可以自动装箱,所以你也应该能够将它们作为参数传递......
  • @Byte Commander 所以,你是说,我可以通过Integer 而不是int
  • 是的,当然。如果我没记错的话,如果你可以传递一个Integer,但给出一个int,Java 会自动将其转换为它的对象表示,这也可以反过来工作,具体取决于需要什么。我认为这称为自动装箱。

标签: java


【解决方案1】:

在您的具体示例中,Object 非常适合,因为PrintStream#println(Object obj) 将打印字符串表示(使用String#valueOf(Object))。

当你传递一个原始值时,它会被自动装箱到它的包装类型中,例如 int 将被转换为扩展 Objectjava.lang.Integer

【讨论】:

    【解决方案2】:

    你可以同时使用

    public void printAnything(Object arg0) {
        System.out.println(arg0);
    }
    

    public void <T> printAnything(T arg0) {
        System.out.println(arg0);
    }
    

    两个版本也可以通过自动装箱调用原语。

    另见Java generics T vs Object

    【讨论】:

      【解决方案3】:

      您需要接受的数据类型是Object

      因为在Java中,除了intfloatboolean等原始数据类型之外,一切都源自它。
      但是,如果需要 Object,也可以传递这些,因为 Java 会自动在原语(例如 int)和它们的对象表示(例如 Integer)之间进行转换,具体取决于哪种形式适合方法原型。此功能称为自动装箱。

      【讨论】:

        【解决方案4】:

        您可以使用Object 作为类型。它可以将 int 自动装箱为 Integer 等。 见here

        对象类是所有其他对象的超类。所以,你可以使用它。另见this

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-26
          • 1970-01-01
          • 1970-01-01
          • 2020-08-12
          • 1970-01-01
          相关资源
          最近更新 更多