Я не понимаю, с классом java.lang.Void
в Java. Может ли кто-нибудь объяснить это с помощью примера.
Какая потребность в классе Void в Java
Ответ 1
Он также содержит Void.TYPE
, полезный для тестирования возвращаемого типа с отражением:
public void foo() {}
...
if (getClass().getMethod("foo").getReturnType() == Void.TYPE) ...
Ответ 2
Предположим, что вы хотите иметь общий тип, который возвращает void для чего-то:
abstract class Foo<T>
{
abstract T bar();
}
class Bar
extends Foo<Void>
{
Void bar()
{
return (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 является неинтересным классом-заполнителем для ссылки на объект класса, представляющий ключевое слово void.
static Class<Void> TYPE
Объект класса, представляющий примитивный Java-тип void.
TYPE
public static final Class<Void> TYPE
Объект класса, представляющий примитивный Java-тип void.