来自Java我对scala的类/对象区别感到困惑.请注意,我不要求正式的差异; 网上有足够的参考资料来解释这一点,并且有关于SO的相关问题 .
我的问题是:
谢谢.
ret*_*nym 23
Java类包含两种完全不同类型的成员 - 实例成员(例如BigDecimal.plus)和静态成员(例如BigDecimal.valueOf).在Scala中,只有实例成员.这实际上是一种简化!但它留下了一个问题:我们在哪里放置类似的方法valueOf?这是对象有用的地方.
class BigDecimal(value: String) {
   def plus(that: BigDecimal): BigDecimal = // ...
}
object BigDecimal {
   def valueOf(i: Int): BigDecimal = // ...
}
您可以将其视为匿名类的声明及其单个实例:
class BigDecimal$object {
   def valueOf(i: Int): BigDecimal = // ...
}
lazy val BigDecimal = new BigDecimal$object
在阅读Scala代码时,区分类型和值是至关重要的.我已将IntelliJ配置为高亮类型蓝色.
val ls = List.empty[Int]  // List is a value, a reference the the object List
ls: List[Int]             // List is a type, a reference to class List
Java还具有Scala中删除的另一个复杂程度 - 字段和方法之间的区别.接口上不允许使用字段,除非它们是静态的和最终的; 方法可以被覆盖,如果在子类中重新定义,则隐藏字段.Scala消除了这种复杂性,只向程序员公开了方法.
最后,回答你的第二个问题:如果你没有声明任何对象,你的程序可能永远不会运行,因为你要public static void main(String... args) {}在Scala中定义等价物,你至少需要一个对象!
Scala 没有任何带有标准类的静态方法的概念,因此在这些情况下您必须使用对象。这里有一篇有趣的文章,提供了很好的介绍:
\n\nhttp://www.codecommit.com/blog/scala/scala-for-java-refugees-part-3
\n\n(向下滚动到 Scala\xe2\x80\x99s 静态排序)
\n| 归档时间: | 
 | 
| 查看次数: | 795 次 | 
| 最近记录: |