【问题标题】:What is the need of Void class in Java [duplicate]Java中需要什么Void类[重复]
【发布时间】:2011-01-22 02:04:48
【问题描述】:

我不清楚 Java 中的 java.lang.Void 类。谁能举个例子详细说明一下。

【问题讨论】:

    标签: java void


    【解决方案1】:

    它还包含Void.TYPE,用于使用反射测试返回类型:

    public void foo() {}
    ...
    if (getClass().getMethod("foo").getReturnType() == Void.TYPE) ...
    

    【讨论】:

    • +1 表示在反射中用于指定方法的类型,没有返回值。
    • 实际上还有 void.class (小写!)在您的示例中也可以完美运行。所以那里不需要 Void。
    • 其实Void.TYPE定义为public static final Class TYPE = Class.getPrimitiveClass("void");它本身就是 void.class。
    • @Willi:是的,我忘了void.class。对不起。
    • void.class 是否存在于 Java 1.1 中?
    【解决方案2】:

    假设你想要一个为某事返回 void 的泛型:

    abstract class Foo<T>
    {
        abstract T bar();
    }
    
    class Bar
        extends Foo<Void>
    {
        Void bar()
        {
            return (null);
        }
    }
    

    【讨论】:

    • 问题是从jdk 1.1开始就存在Void类。
    • 我喜欢 TofuBeer 的回答,但 Roman 在那里提出了一个有趣的观点。
    • 这并不是严格意义上的,它只是第一次想到的用途。反思的答案就是引入它的原因。
    • 有这个用例,当 javac 写 This method must return a result of type Void 时被难住了。没想到只是返回(null)
    【解决方案3】:

    实际上有一个实用案例 void.class 非常有用。 假设您需要为类字段创建注释,并且您需要定义字段的类以获取有关它的一些信息(例如,如果字段是枚举,则获取潜在值的列表)。在这种情况下,你需要这样的东西:

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface PropertyResourceMapper
    {
        public Class acceptedValues() default void.class;
    }
    

    这样使用:

    @PropertyResourceMapper(acceptedValues = ImageFormat.class, description = "The format of     the image (en example, jpg).")
    private ImageFormat format;
    

    我已经使用它创建了一个自定义序列化器,将类转换为专有格式。

    【讨论】:

      【解决方案4】:

      来自Java docs

      public final class Void
      extends Object
      

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

      static Class<Void> TYPE 
      

      表示基本 Java 类型 void 的 Class 对象。

      TYPE
      public static final Class<Void> TYPE
      

      表示基本 Java 类型 void 的 Class 对象。

      【讨论】:

      • 这只是文档的复制+粘贴,不是真正的答案。
      • @Hugo 确实如此,但我仍然发现这是最有用的答案。其他答案回避了它存在的原因。它是基本类型的类表示。像整数或双精度。
      • 您还应该提到,居住在 Void 中的唯一术语是 null。
      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2013-02-10
      相关资源
      最近更新 更多