【问题标题】:Why can't use Void as the return type for main method为什么不能使用 Void 作为 main 方法的返回类型
【发布时间】:2016-11-09 10:07:57
【问题描述】:

所以我想测试Void类型然后我写了这个简单的程序:

package ehsan;

public class NumTest {
    public static Void main(String[] args) {
        System.out.println("Hello, World!");
        return null; /* The compiler forced me to do so. I just can't realize what is the point in returning in Void type!? */
    }
}

所以现在当我想编译时,编译器会报错:

main method must return a value of type void

为什么编译器看不到我没有返回任何内容并且正在使用Void

【问题讨论】:

  • Voidvoid 不一样。
  • 因为标准将main方法的签名定义为public static void main(String... args)。自动装箱/拆箱与方法签名无关。您不能自动装箱签名。
  • Void 不是 void 的包装器
  • 是的,Java 有一些混乱的角落。这是其中之一。克服它并继续前进。 (顺便提一下,这个问题很好)。

标签: java void main-method


【解决方案1】:

您应该使用void(小写v)而不是Void 对象。 Void 对象不会像例如int/Integer,有关自动装箱对象的列表,请参阅 Java Language Specification

Void 不是void 的包装器,它只是一个名称非常相似的对象,因此它可以用于需要指定返回类型的地方(例如Callable<T>),它仅用于文档目的并解决一些通用类返回类型。

第二个用例是反射(当你想检查void函数的返回值时,你会得到Void.TYPE)。

正确的行是:

public static void main(String[] args)

【讨论】:

  • 那么Void 的唯一用途是指定泛型类型? (对不起我的新手问题:)
  • 通常,还有一些其他与反射相关的用例,如Void docs中所写:Void类是一个不可实例化的占位符类,用于保存对代表的Class对象的引用Java 关键字 void。
【解决方案2】:

Void 是一个类类型,所以编译器希望你为它返回一个值。您应该使用带有小写字母的void

你的错误原因:

main 方法必须返回一个 void 类型的值

是由于 main 方法应始终返回 void 的规则 - 这是一个 java 关键字而不是类类型。

【讨论】:

    【解决方案3】:

    您必须使用void 而不是Void

    像这样:

    public static void main(String[] args)
    

    【讨论】:

      【解决方案4】:

      错字。

      void 不是Void

      恰巧Void是java中的一个类。来自文档

      Void 类是一个不可实例化的占位符类,用于保存 对表示 Java 关键字 void 的 Class 对象的引用。

      【讨论】:

      • 我的eclipse说这个方法必须返回一个Void类型的结果
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多