|
1
2
3
4
|
var map = new Object();map["a"] = 1;map["b"] = 2;map["c"] = 3; |
Вместо этого вы, вероятно, напишите
|
1
|
var map = { "a":1, "b":2, "c":3 }; |
В частности, при передаче сложных параметров в функцию API это оказывается очень удобным синтаксисом.
Как насчет этих вещей в Java?
Недавно я опубликовал информацию об обходном пути, который вы можете использовать для создания «List literal» с помощью Arrays.asList (…) здесь:
http://blog.jooq.org/2011/10/28/javas-arrays-aslist-is-underused/
Это несколько хорошо. Вы также можете создавать массивы при их назначении, используя массивы литералов. Но вы не можете передать литерал массива методу:
|
01
02
03
04
05
06
07
08
09
10
11
|
// This will work:int[] array = { 1, 2, 3 };// This won't:class Test { public void callee(int[] array) {} public void caller() { // Compilation error here: callee({1, 2, 3}); }} |
Упоминание Брайана Гетца о различных литералах в lambda-dev
Пропустив эту функцию довольно долго, я был очень рад прочитать упоминание Брайана Гетца о них в списке рассылки lambda-dev:
http://mail.openjdk.java.net/pipermail/lambda-dev/2012-May/004979.html
Идеи, которые он перечислял, были следующими:
|
1
2
3
4
5
6
|
#[ 1, 2, 3 ] // Array, list, set#{ "foo" : "bar", "blah" : "wooga" } // Map literals#/(\d+)$/ // Regex#(a, b) // Tuple#(a: 3, b: 4) // Record#"There are {foo.size()} foos" // String literal |
К сожалению, он также добавил следующий отказ от ответственности:
Не то чтобы мы приняли все это сразу (или когда-либо)
Очевидно, что на данном этапе развития языка Java для Java 8 он не может дать никаких гарантий относительно того, что может быть добавлено в будущем. Но с точки зрения jOOQ идея возможности объявлять кортежи и записывать литералы (с соответствующей поддержкой языков для таких типов!) Весьма волнующая. Представьте, что вы выбираете произвольные кортежи / записи с соответствующими парами индекс / тип, столбец / тип. Представьте себе такую конструкцию в Java или Scala (используя jOOQ):
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// For simplicity, I'm using Scala's val operator here,// indicating type inference. It's hard to guess what true// record support in the java language should look likefor (val record : create.select( BOOK.AUTHOR_ID.as("author"), count().as("books")) .from(BOOK) .groupBy(BOOK.AUTHOR_ID) .fetch()) { // With true record support, you could now formally extract // values from the result set being iterated on. In other // words, the formal column alias and type is available to // the compiler: int author = record.author; int books = record.books;} |
Очевидно, это всего лишь предположение, но вы можете видеть, что при истинной поддержке кортежей / записей в языке Java во вселенной Java будет реализовано множество функций, что окажет очень сильное влияние на все существующие библиотеки и API.
Будьте на связи!
Справка: массив, список, набор, отображение, кортеж, запись литералов на Java от нашего партнера по JCG Лукаса Эдера из блога JAVA, SQL и AND JOOQ .