В чем разница между Java.ленг.Пустота и пустота?
в API
"пустота классе является uninstantiable класс заполнитель для проведения
ссылка на объект класса, представляющий ключевое слово Java void."
- что такое "uninstantiable" держатель места класса? Когда будет
java.lang.Voidиспользоваться? Если класс "деинсталлируется", какой от него прок? - в чем разница между
java.lang.Voidиvoid?
6 ответов:
The только точки на
VoidпровестиVoid.TYPE, что-то вродеvoid.class. Если у вас есть отражающая ссылка на метод, который возвращаетvoid, и вы получите его тип возврата, он вернетсяVoid.TYPE.вы не можете и не должны использовать его ни для чего другого.
.
java.lang.Voidаналогичноjava.lang.Integer.Integerэто способ боксирования значений примитивного типаint.Voidэто способ боксирования значений примитивного типаvoid.
наиболее распространенное использование
Voidдля размышления, но это не единственное место, где он может быть использован.
void- Это ключевое слово, которое означает, что функция не приводит значения.
java.lang.Voidявляется ссылочным типом, то действует следующее:Void nil = null;(пока это не интересно...)
в результате тип (функция с возвращаемым значением типа
Void) это означает, что функция *всегда * возвращениеnull(он не может вернуть что-то кромеnull, потому чтоVoidне имеет экземпляров).Void function(int a, int b) { //do something return null; }зачем мне нужна функция, которая всегда возвращает null?
до изобретения дженериков у меня не было прецедента для
Void.с дженериками есть несколько интересных случаев. Например,
Future<T>является держателем для результата асинхронной операции, выполняемой другим нитка.Future.getвернет значение операции (типаT), и будет блокировать до тех пор, пока вычисление не выполняется.но... Что делать, если нет ничего, чтобы вернуться? Просто: используйте
Future<Void>. Например, в Google App Engine служба Asyncronous Datastoredeleteоперация возвращает будущее. Whenget ()is invoked on that future,значение null возвращается после удаление завершено. Можно было бы написать аналогичный пример с вызвать s.другой вариант использования-это
Mapбез значений, т. е. aMap<T,Void>. Такая карта ведет себя какSet<T>, то это может быть полезно, когда нет эквивалентного реализацииSet(например, нетWeakHashSet, тогда можно было бы использоватьWeakHashMap<T,Void>).
Void-это функция автобокса (начиная с JDK 1.5) void.
ну его самоочевидно, что пустота является ссылкой, тогда как пустота является примитивный тип.
Итак, где требование приходит, чтобы использовать Void ???
одно общее использование с универсальными типами, где мы не можем использовать примитив.
скажем, в случае Android
AsyncTaks<Params, Progress, Result>что если я не хочу, чтобы получить обновление прогресса. Я не могу использовать void (примитивный тип) здесь мы требуем Ява.ленг.Пустота
Void полезно, потому что иногда вам нужно указать тип возврата метода вне самого метода.
например, возьмите это java 8 лямбда-выражение, который проверяет, имеет ли объект EventResource определенные свойства, используя метод с именем
checkBenefitConcertInCentralPark, передано в методcheckCreatedEvent:eventChecker.checkCreatedEvent(TestEvents::checkBenefitConcertInCentralPark);The
checkBenefitConcertInCentralParkметод определяется следующим образом (обратите внимание на использование Void):public static Void checkBenefitConcertInCentralPark(EventResource eventResource) { // JUnit code here... // assertThat(blablabla :) ) return null; // we can only return null at the end of a method when returning Void }а то метод в метод
checkCreatedEvent.// Function<EventResource, Void> describes the checkBenefitConcertInCentralPark method public void checkCreatedEvent(Function<EventResource, Void> function) { function.apply(this.eventResource); }
еще один пример использования
VoidиSwingWorkernew SwingWorker<Void, Integer> () { @Override protected Void doInBackground(){ ... } @Override protected void process(List<Integer> chunk){ ... } @Override public void done(){ ... } }.execute();
Comments