var map = new Object();
map["a"] = 1;
map["b"] = 2;
map["c"] = 3;
相反,您可能会写
var map = { "a":1, "b":2, "c":3 };
具体来说,当将复杂参数传递给API函数时,这实际上是一种非常方便的语法。
Java中的这些东西呢?
我最近发布了一种解决方法,您可以在这里使用Arrays.asList(…)创建“列表文字”:
http://blog.jooq.org/2011/10/28/javas-arrays-aslist-is-underused/
这样就可以了。 在分配数组时,还可以使用数组文字构造数组。 但是您不能将数组文字传递给方法:
// 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});
}
}
Brian Goetz在lambda-dev上提到了各种文字
错过了很长一段时间后,我很高兴阅读lambda-dev邮件列表中的Brian Goetz关于它们的提及:
http://mail.openjdk.java.net/pipermail/lambda-dev/2012-May/004979.html
他列出的想法是:
#[ 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 8当前Java语言发展的现阶段,他不能保证将来会增加什么。 但是从jOOQ的角度来看,能够声明元组和记录文字(具有适当的支持语言的支持,支持这种类型!)的想法非常令人激动。 想象一下选择任意元组/记录及其关联的索引/类型,列/类型对。 想象一下在Java或Scala中这样的构造(使用jOOQ):
// 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 like
for (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 Universe中将释放许多功能,这对所有现有的库和API都有很大的影响
敬请关注!
参考: Java,SQL和AND JOOQ博客上的JCG合作伙伴 Lukas Eder 用Java数组,列表,设置,映射,元组和记录文字 。
翻译自: https://www.javacodegeeks.com/2012/06/array-list-set-map-tuple-record.html