小编Gre*_*ena的帖子

为什么收集文字?

从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)

我的问题是:

  1. 难道不可能of在所有集合类中提供静态方法,可以按如下方式使用:

List<String> fruits = ArrayList.of("Apple", "Mango", "Guava");

IMO看起来和文字版本一样好,而且也相当简洁.那么为什么他们必须发明一种新的语法(编辑: '新'我的意思'新的Java'.)?

  1. 当我说List<String> fruits = [ "Apple", "Mango", "Guava" ];什么List我真的得到什么?它会是ArrayList或者LinkedList别的吗?

1正如评论中所指出的,集合文字并没有为Java 7,也不是Java 8做出决定.(这是Oracle开发人员Brian Goetz 的一封电子邮件,总结了不包括此功能的基本原理;这里是提案本身.)

java collections java-7

28
推荐指数
2
解决办法
7639
查看次数

在返回类型上重载?

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

12
推荐指数
2
解决办法
2241
查看次数

按名称重复参数

如何在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

10
推荐指数
2
解决办法
1803
查看次数