Intereting Posts
Textview.getLineCount всегда 0 в android У менеджеров кластеров API Android Android API минимальное количество маркеров до создания кластера? Каково основное использование восходящего обмена сообщениями в GCM Cloud Connection Server? В Android / Gradle, как определить задачу, которая запускается только при создании конкретного buildType / buildVariant / productFlavor (v0.10 +) Кружок на Google Maps для Android v2 мерцает, когда размер изменяется с помощью кнопки поиска Проблема с Android Support Library 23.2.1 AppBarLayout setExpanded Говорить не удалось, не привязано к двигателю TTS Как показать предупреждение / ошибку, если используемый идентификатор ресурса принадлежит другому макету действий Как узнать, какая последняя версия любой зависимости, которую мы включаем в Gradle? Приложение Android Подключение к серверу Node.js с помощью Socket.io Ошибка сборки Android: неизвестный пакетный фильтр Android: как отобразить растровое изображение в WebView? Защитить доступ к URL-адресу API через хэш в приложении Android Ошибка Cursor.moveToNext Android Проверка того, превысил ли размер файла определенное значение

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" 

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

     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 , он в основном существует для полноты и очень редкого экземпляра, где вам нужно его для отражения.