“Void 实例”是否总是返回 false?

2022-09-01 21:48:10

此方法可以以某种方式返回吗?true

public static <T> boolean isVoid(T t)
{
    return t instanceof Void;
}

答案 1

是的,但我敢肯定这并不是很有用:

public static void main(final String[] args) throws Exception {
    final Constructor c = Void.class.getDeclaredConstructors()[0];
    c.setAccessible(true);
    System.out.println(c.newInstance(null) instanceof Void);
}

类无法实例化,因此通常您的代码不需要处理实例。上面的代码片段只是一个例子,说明在使用反射时可以释放出什么破坏... ;-)VoidVoid


答案 2

我不明白为什么你会检查一个值是否是(或)的实例,因为,就像第n次说的那样,不能在没有反射的情况下被实例化,甚至无法扩展。但是,对于更有用的情况,如果您想知道给定的给定是否为 void 类型,则不会使用,而您的方法参数将是类型。测试用例是:voidVoidClassinstanceofClass<?>

public class VoidCheckTest {

    public static void main(String...args) throws SecurityException, NoSuchMethodException {
        Class<VoidCheckTest> c = VoidCheckTest.class;

        Method m = c.getMethod("main", String[].class);

        System.out.println(m.getReturnType().getName() + " = " + isVoid(m.getReturnType()));        
    }

    private static boolean isVoid(Class<?> t) {
        return Void.class.isAssignableFrom(t) || void.class.equals(t);
    }
}

这将输出

void = true

此方法可能还有其他用例,但我现在看不到任何其他用例。