从Java 7上的各种在线文章中我已经知道Java 7将具有如下所示的集合文字1:
List<String> fruits = [ "Apple", "Mango", "Guava" ];
Set<String> flowers = { "Rose", "Daisy", "Chrysanthemum" };
Map<Integer, String> hindiNums = { 1 : "Ek", 2 : "Do", 3 : "Teen" };
Run Code Online (Sandbox Code Playgroud)
我的问题是:
of在所有集合类中提供静态方法,可以按如下方式使用:List<String> fruits = ArrayList.of("Apple", "Mango", "Guava");
IMO看起来和文字版本一样好,而且也相当简洁.那么为什么他们必须发明一种新的语法(编辑: '新'我的意思'新的Java'.)?
List<String> fruits = [ "Apple", "Mango", "Guava" ];什么List我真的得到什么?它会是ArrayList或者LinkedList别的吗?1正如评论中所指出的,集合文字并没有为Java 7,也不是Java 8做出决定.(这是Oracle开发人员Brian Goetz 的一封电子邮件,总结了不包括此功能的基本原理;这里是提案本身.)
scala> val shares = Map("Apple" -> 23, "MicroSoft" -> 50, "IBM" -> 17)
shares: scala.collection.immutable.Map[java.lang.String,Int]
= Map(Apple -> 23, MicroSoft -> 50, IBM -> 17)
scala> val shareholders = shares map {_._1}
shareholders: scala.collection.immutable.Iterable[java.lang.String]
= List(Apple, MicroSoft, IBM)
scala> val newShares = shares map {case(k, v) => (k, 1.5 * v)}
newShares: scala.collection.immutable.Map[java.lang.String,Double]
= Map(Apple -> 34.5, MicroSoft -> 75.0, IBM -> 25.5)
Run Code Online (Sandbox Code Playgroud)
从这个例子看,这个map方法似乎在返回类型上重载.在返回类型上重载是不可能的?有人请解释这里发生了什么?
如何在Scala中传递名称重复参数?
以下代码无法工作:
scala> def foo(s: (=> String)*) = {
<console>:1: error: no by-name parameter type allowed here
def foo(s: (=> String)*) = {
^
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以将可变数量的名称参数传递给方法?
functional-programming scala variadic-functions lazy-evaluation