Java.lang.Void vs void vs Null

В чем же разница между Void , void и могу ли я просто использовать null вместо этого?

Я спрашиваю об этом, потому что я смотрю пример кода Android, где они использовали Void, но Eclipse-ошибки на нем (это говорит, что Void cannot be resolved to a variable ).

Мой код, который ломается,

 public class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{ ... } 

Я использую его так

 MyAsyncTask myAsyncTask = new MyAsyncTask(); myAsyncTask.execute((Void),null);//this is the line that breaks "Void cannot be resolved to a variable" 

Solutions Collecting From Web of "Java.lang.Void vs void vs Null"

У вас есть дополнительная запятая в вашем коде.

 myAsyncTask.execute((Void),null); //^extra comma right here 

Кроме того, нет необходимости бросать null в Void , потому что (1) у Void нет экземпляров и, следовательно, нет объекта Void , и (2) исключение null для чего-либо бесполезно, поскольку null является допустимым значением для любого типа данных объекта ,

Код, вероятно, должен быть просто:

 myAsyncTask.execute(null); 

Наиболее распространенное использование 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 операция delete Asyncronous Datastore Service возвращает Future<Void> . Когда get() вызывается в этом будущем, null возвращается после завершения удаления. Можно написать аналогичный пример с Callable s.

Другим вариантом использования является Map без значений, т. Map<T,Void> . Такая карта ведет себя как Set<T> , тогда она может быть полезна, когда нет эквивалентной реализации Set (например, нет WeakHashSet , тогда можно использовать WeakHashMap<T,Void> ).

Void – это «неинтегрируемый класс-заполнитель для ссылки на объект класса, представляющий ключевое слово void Java». (Из http://docs.oracle.com/javase/6/docs/api/java/lang/Void.html )

void – это тип возврата, который не означает возврата.

null – это отсутствие значения.

java.lang.Void – это бокс-представление типа void . Поскольку вы не можете иметь экземпляр типа void , он в основном существует для полноты и очень редкого экземпляра, где вам нужно его для отражения.