Java 是不是;“无效实例”;总是返回false?

Java 是不是;“无效实例”;总是返回false?,java,generics,void,instanceof,Java,Generics,Void,Instanceof,此方法能否以某种方式返回true public static <T> boolean isVoid(T t) { return t instanceof Void; } 公共静态布尔值isVoid(T) { 返回Void的t instanceof; } 是的,但我确信这并不是真的有用: public static void main(final String[] args) throws Exception { final Constructor c = Void.

此方法能否以某种方式返回
true

public static <T> boolean isVoid(T t)
{
    return t instanceof Void;
}
公共静态布尔值isVoid(T)
{
返回Void的t instanceof;
}

是的,但我确信这并不是真的有用:

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);
}

不能实例化
Void
类,因此通常代码不需要处理
Void
实例。上面的代码片段只是一个示例,说明了使用反射时可能造成的破坏…;-)

否。要使其返回true,必须调用它并传递类型为
Void
的参数。但是类Void的构造函数是私有的,所以不能调用它。而且,这个类是最终的,所以您甚至不能扩展它。因此,您无法创建类
Void
的实例。但是需要使您的方法返回true

顺便说一句:如果你真的想这样做,通过反射调用
Void
的构造函数。但我可以认为这是一种系统滥用行为。祝你好运。

不:

Constructor<Void> cv = Void.class.getDeclaredConstructor(); 
cv.setAccessible(true); 
Void v = cv.newInstance(); 
System.out.println(v instanceof Void); //-> true
Constructor cv=Void.class.getDeclaredConstructor();
cv.setAccessible(真实);
Void v=cv.newInstance();
System.out.println(v instanceof Void);//->真的

我不明白您为什么要检查某个值是否是
void
(或
void
)的实例,因为像前面所说的第n次一样,如果不使用反射进行黑客攻击,就无法实例化,甚至无法扩展。但是,对于更有用的情况,如果您想知道给定的
是否为void类型,则不会使用
instanceof
,而方法参数将为
类型。一个测试用例是:

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);
    }
}

这个方法可能还有其他的用例,但我现在没有看到其他的。

这个方法怎么称呼?你能举几个例子吗?你为什么要做这个测试?这一切的背后一定有一些故事。@Hovercraft我只是喜欢旁边这些狡猾的行为,我想知道更多关于“空虚”+1的可笑+1非常好!顺便说一句,您只需使用
c.newInstance()
(不需要
null
param)+1,通过反射无法创建的唯一类是类。这就是为什么如果您想确保没有人实例化类(例如库),您不仅需要将构造函数设置为私有,还需要使该构造函数引发异常。我建议使用UnsupportedOperationException。@Sanjary T.Sharma啊,“QFT”.equals(“引用为真”)?等效代码在Scala中不需要任何复杂的代码:
()。isInstanceOf[Unit]==true
void = true