Does «instanceof Void ”Всегда возвращать ложь?

Может ли этот метод каким-то образом вернуть true ?

public static <T> boolean isVoid(T t)
{
    return t instanceof Void;
}
23
задан Eng.Fouad 9 July 2011 в 18:41
поделиться

2 ответа

Я не понимаю, почему вы проверяете, является ли значение экземпляром void (или Void), поскольку, как сказано n-й раз, не может быть создан, или даже расширен без взлома с отражением. Однако для более полезной ситуации, если вы хотите знать, относится ли данный тип Class к типу void, вы бы не использовали instanceof, а параметр вашего метода имел бы тип Class<?>. Примером теста может быть:

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

. Могут быть и другие варианты использования этого метода, но сейчас я не вижу других.

6
ответ дан 29 November 2019 в 01:08
поделиться

Нет. Чтобы сделать его верным, вы должны вызвать его и передать аргумент типа Void. Но конструктор класса Void является закрытым, поэтому его нельзя вызвать. Более того, этот класс является окончательным, поэтому вы даже не можете его расширить. Таким образом, вы не можете создать экземпляр класса Void. Но это необходимо, чтобы ваш метод возвращал true.

Кстати: если вы действительно хотите это сделать, вызывайте конструктор из Void по рефлексии. Но я могу думать об этом как о упражнении в злоупотреблении системой. Удачи.

2
ответ дан 29 November 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: