Статьи

Проникнуть на взгляд гуавы 11

Недавняя Reddit / Java нить Если вы до сих пор не знаете , почему гуава является удивительной …. ссылаются на гуавах Разъяснения Wiki страницы . Когда я смотрел на это, я заметил, что страница сфокусирована на объяснении Guava Math . Я несколько раз писал в блоге о возможностях гуавы , но я не знал о математических классах, на которые ссылаются, Именно тогда я понял, что это относится к 11-му выпуску Guava. В тот момент мне показалось интересным отследить другие улучшения, которые можно ожидать от следующего выпуска Guava. Я кратко расскажу о некоторых уже доступных подсказках в отношении улучшений, которые появятся в выпуске Guava Release 11, но оставлю это обсуждение с очевидными оговорками, что вещи могут быть изменены до его окончательного выпуска, и что я не обладаю внутренними знаниями о внутренней работе Guava.

Предыдущая ссылка на страницу объяснения Guava Wiki — это только одна из нескольких страниц Wiki Guava, которые были обновлены wasserman.louis за последние 36 часов (из публикации этого поста).

Большинство обновленных страниц Guiki Wiki, по-видимому, обновлены, чтобы связать метку «Explained» с записью и привязать ее к вики-странице «Guava Explained». Тем не менее, страница с объяснением Guava Math Explained Wiki определенно нова.

Классы в утилитах Guava Math, по-видимому, относятся к пакету com.google.common.math с совершенно новым пакетом, содержащим четыре класса: BigIntegerMath , DoubleMath , IntMath и LongMath . Описание Javadoc на уровне класса для каждого из этих четырех математических классов Guava говорит нам, что у каждого класса есть «реализации многих методов», которые «основаны на материале Генри С. Уоррена, восхищения Хакера младшего » (Addison Wesley, 2002). ) «. Как и в случае со многими другими классами Guava, эти классы дополняют методы, предоставляемые Java SDK Math и другими математическими классами.

Хотя главная страница библиотек Guava в настоящее время указывает на Javadoc Guava Release 10 в качестве его «Документов API для самого последнего выпуска», « предварительные документы API в git » в настоящее время указывают на документацию, которая ссылается на выпуск 11 Guava. Например, в то время как com .google.common.math недоступен в стандартной документации по API Guava ( выпуск 10 ), пакет задокументирован в предварительной документации API (выпуск 11). Более новая «предварительная» документация API дает нам некоторые из наших лучших подсказок относительно вероятных будущих возможностей Guava.

В блоге Groovy Script для сравнения версий Javadoc я использовал Groovy- скрипт для сравнения версий Java путем сравнения конструкций, которые они добавляли или удаляли в каждой новой версии. Я сделал некоторые адаптации к этому сценарию, чтобы сравнить произвольный список строк, и применил его для сравнения «самого последнего выпуска» (10) Guava с «предварительным выпуском» (11). Вот модифицированный скрипт для сравнения двух.

diffVersionsJavadocs.groovy

#!/usr/bin/env groovy
// diffVersionsJavadocs.groovy
//
// Examples using Guava:
//
// Guava Release 10:
//    http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/allclasses-noframe.html
// Guava Release 11:
//    http://docs.guava-libraries.googlecode.com/git/javadoc/allclasses-noframe.html

if (args.length < 4)
{
   println "\nUSAGE: diffVersionsJavadocs first_label first_url second_label second_url"
   println "\n\twhere first_label is name of first version"
   println "\t      first_url is URL of Javadoc for first version (usually allclasses)"
   println "\t      second_label is name of second version"
   println "\t      second_url is URL of Javadoc for second version (usually allclasses)"
   System.exit(-1)
}
@Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='0.9.7')

def firstXml = new XmlParser(new org.ccil.cowan.tagsoup.Parser()).parse(args[1])
def firstUrls = firstXml.'**'.a.@href
def firstLabel = args[0]

def secondXml = new XmlParser(new org.ccil.cowan.tagsoup.Parser()).parse(args[3])
def secondUrls = secondXml.'**'.a.@href
def secondLabel = args[2]

compareSetsOfStrings(secondUrls, secondLabel, firstUrls, firstLabel)

/**
 * Compare first Collection of Strings to second Collection of Strings by
 * identifying which Strings are in each Collection that are not in the other.
 *
 * @param firstStrings First Collection of Strings to be compared.
 * @param firstLabel Name of first collection of Strings.
 * @param secondStrings Second Collection of Strings to be compared.
 * @param secondLabel Name of second collection of Strings.
 */
def void compareSetsOfStrings(
   Collection<String> firstStrings, String firstLabel,
   Collection<String> secondStrings, String secondLabel)
{
   println "Constructs in ${firstLabel} But Not in ${secondLabel}"
   def firstButNotSecond = firstStrings - secondStrings
   printIndentedStrings(firstButNotSecond)

   println "Constructs in ${secondLabel} But Not in ${firstLabel}"
   def secondButNotFirst = secondStrings - firstStrings
   printIndentedStrings(secondButNotFirst)
}


/**
 * Print the provided Strings one per line indented; prints "None" if the
 * provided List of Strings is empty or null.
 *
 * @param strings The Strings to be printed
 */
def void printIndentedStrings(Collection<String> strings)
{
   if (!strings?.isEmpty())
   {
      new TreeSet(strings).each
      {
         println "\t${it}"
      }
   }
   else
   {
      println "\tNone"
   }   
}

Для удобства я поместил два URL-адреса, которые я предоставил сценарию для сравнения Guava 10 с Guava 11, в комментариях сценария в начале сценария. На следующем снимке экрана показано выполнение сценария и его вывод.

Скрипт Groovy, сравнивающий Javadoc для Guava Release 10 с Guava Release 11, указывает, что из Guava Release 11 были удалены четыре конструкции, которые были в Guava Release 9. Это EvictionListeners (класс), MapEvictionListener (интерфейс), AbstractListenableFuture (класс) и UninterruptibleFuture (интерфейс). Все они были четко отмечены в Javadoc как устаревшие в документации к Выпуску 10, включая конкретные заявления о том, что их планируется удалить в Выпуске 11, и что следует использовать вместо них. (Я разместил в документе «Эффективная документация Javadoc», иллюстрированном в знакомых проектах что эта объявленная версия, из которой будет удалена устаревшая конструкция, является особенно эффективным инструментом документирования.)

Guava Release 11 представляет несколько совершенно новых конструкций. Они были показаны на снимке экрана выше, но для удобства перечислены здесь в виде маркеров.

Конструкции в Выпуске 11, но не в Выпуске 10 (для сравнения Javadoc)

  • ком / Google / общие / кэш / AbstractLoadingCache.html
  • ком / Google / общие / кэш / CacheLoader.InvalidCacheLoadException.html
  • ком / Google / общие / кэш / ForwardingLoadingCache.SimpleForwardingLoadingCache.html
  • ком / Google / общие / кэш / ForwardingLoadingCache.html
  • ком / Google / общие / кэш / LoadingCache.html
  • ком / Google / общие / кэш / Weigher.html
  • ком / Google / общие / собирать / ImmutableTable.Builder.html
  • ком / Google / общие / собирать / ImmutableTable.html
  • ком / Google / общие / собирать / Queues.html
  • ком / Google / общие / собирать / RangeSet.html
  • ком / Google / общие / собирать / SortedMultiset.html
  • ком / Google / общие / побег / ArrayBasedCharEscaper.html
  • ком / Google / общие / побег / ArrayBasedEscaperMap.html
  • ком / Google / общие / побег / ArrayBasedUnicodeEscaper.html
  • ком / Google / общие / побег / CharEscaper.html
  • ком / Google / общие / побег / CharEscaperBuilder.html
  • ком / Google / общие / побег / Escaper.html
  • ком / Google / общие / побег / Escapers.Builder.html
  • ком / Google / общие / побег / Escapers.html
  • ком / Google / общие / побег / SourceCodeEscapers.html
  • ком / Google / общие / побег / UnicodeEscaper.html
  • ком / Google / общие / HTML / HtmlEscapers.html
  • ком / Google / общие / математика / BigIntegerMath.html
  • ком / Google / общие / математика / DoubleMath.html
  • ком / Google / общие / математика / IntMath.html
  • ком / Google / общие / математика / LongMath.html
  • ком / Google / общие / нетто / HttpHeaders.html
  • ком / Google / общие / нетто / PercentEscaper.html
  • ком / Google / общие / нетто / UriEscapers.html
  • COM / Google / общие / примитивы / UnsignedInteger.html
  • COM / Google / общие / примитивы / UnsignedInts.html
  • COM / Google / общие / примитивы / UnsignedLong.html
  • ком / Google / общие / Util / параллельный / AbstractScheduledService.CustomScheduler.html
  • ком / Google / общие / Util / параллельный / AbstractScheduledService.Scheduler.html
  • ком / Google / общие / Util / параллельный / AbstractScheduledService.html
  • ком / Google / общие / Util / параллельный / AsyncFunction.html
  • ком / Google / общие / Util / параллельный / AtomicDouble.html
  • ком / Google / общие / Util / параллельный / AtomicDoubleArray.html
  • ком / Google / общие / Util / параллельный / AtomicLongMap.html
  • ком / Google / общие / XML / XmlEscapers.html

Помимо новых математических классов, другие конструкции Groovy, которые я с нетерпением ожидаю попробовать, включают в себя новые классы коллекций, новые классы параллелизма, новые неподписанные примитивные классы и escapers ( пакет com.google.common.escape , com.google. класс common.html.HtmlEscapers , com.google.common.net.PercentEscaper , com.google.common.net.UriEscapers и com.google.common.xml.XmlEscapers ).

Сценарий, выполненный выше, только показал совершенно новые конструкции для Guava Release 11. Он также будет получать новые методы для существующих объектов. Например, очень полезный класс Guava Strings, похоже, получает два новых метода [ commonPrefix (CharSequence, CharSequence) и commonSuffix (CharSequence, CharSequence) .] И Objects.ToStringHelper , по-видимому, получают множество новых удобных методов.

Будучи проектом с открытым исходным кодом, новые возможности Guava лучше всего «заглянуть», если взглянуть на сам исходный код . Javadoc документация Guava генерируется таким образом, что нажатие на имя конструкции на его странице Javadoc покажет исходный код этой конструкции. В некоторых случаях это может быть быстрее, чем загрузка кода, хотя преимущество загрузки исходного кода, очевидно, заключается в возможности просмотра его в вашей любимой среде IDE.

 

От http://marxsoftware.blogspot.com/2011/12/sneaking-peek-at-guava-release-11.html