加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – 课程足够吗?

发布时间:2020-12-16 08:51:23 所属栏目:安全 来源:网络整理
导读:来自 Java我对scala的类/对象区别感到困惑. 请注意,我不要求正式的差异;有足够的 网上的参考文献解释了这一点,并且有相关的问题 SO. 我的问题是: 为什么scala的设计者 选择做更多的事情 复杂(与Java或.相比) C#)?我有什么缺点 我希望如果忽略这种区别 并且
来自 Java我对scala的类/对象区别感到困惑.
请注意,我不要求正式的差异;有足够的
网上的参考文献解释了这一点,并且有相关的问题
SO.

我的问题是:

>为什么scala的设计者
选择做更多的事情
复杂(与Java或.相比)
C#)?我有什么缺点
我希望如果忽略这种区别
并且只声明课程?

谢谢.

解决方法

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消除了这种复杂性,只向程序员公开了方法.

最后,回答你的第二个问题:如果你没有声明任何对象,你的程序可能永远不会运行,因为你在Scala中定义了相同的public static void main(String … args){},你需要至少一个对象!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读