当您说“类型”时,我将假设您主要是指静态类型。 但是我将在短期内讨论动态类型。

静态类型是可以被静态证明的程序一部分的属性(静态表示“不运行它”)。 在静态类型语言中,无论您是否编写,每个表达式都具有一种类型。 例如,在Cish的“ int x = a * b + c-d”中,a,b,c和d具有类型,a * b具有类型,a * b + c具有类型,a * b + c -d具有类型。 但是我们只用类型注释了x。 在其他语言中,例如Scala,C#,Haskell,SML和F#,即使这不是必需的。

究竟可以证明哪些属性取决于类型检查器。

另一方面,Scala样式类仅是一组对象的规范。 该规范包括一些类型信息,并包含许多实现和表示详细信息,例如方法主体和私有字段等。在Scala中,类还指定了一些模块边界。

许多语言都有类型,但是没有类,许多语言都有类,但是没有(静态)类型。

类型和类之间有几个明显的区别。 List [String]是类型,但不是类。 在Scala列表中,类是类,但通常不是类型(实际上是更高种类的类型)。 在C#中,List不是任何类型,在Java中,它是“原始类型”。

Scala提供结构类型。 {def foo:Bar}表示任何可证明具有foo方法的对象,无论该类如何,该方法都会返回Bar。 它是类型,而不是类。

可以使用类型参数来抽象类型。 当您写def foo [T](x:T)= ...时,则foo T的内部是一个类型。 但是T不是一个类。

类型可以在Scala中是虚拟的(即“抽象类型成员”),但今天类不能在Scala中进行虚拟化(尽管有一种繁重的方式来编码虚拟类[https://wiki.scala-lang.org/display / SIW / VirtualClassesDesign)]

现在,动态类型。动态类型是运行时在执行某些操作之前自动检查的对象的属性。在基于动态类型的基于类的OO语言中,类型和类之间存在很强的相关性。在诸如Scala和Java之类的JVM语言上也发生了同样的事情,它们具有只能动态检查的操作,例如反射和转换。在这些语言中,“类型擦除”或多或少意味着大多数对象的动态类型与它们的类相同。或多或少。这是不正确的,例如,通常不会擦除的数组,以便运行时可以分辨出Array [Int]和Array [String]之间的区别。但是请记住我的广义定义“动态类型是运行时自动检查的对象的属性”。使用反射时,可以将任何消息发送到任何对象。如果对象支持该消息,则一切正常。因此,将所有可能像鸭子一样发出嘎嘎声的对象称为动态类型是有意义的,即使它不是类。这就是Python和Ruby社区所谓的“鸭子类型”的本质。同样,按照我的广义定义,就大多数语言而言,运行时会自动检查数字以确保您不会被零除,就连“零度”也是一种动态类型。可以通过将零(或非零)设为静态类型来静态地证明这一点的语言很少。

最后,就像其他人提到的那样,有像int这样的类型,没有类作为实现细节,有类似Null和Any的类型,虽然有些特殊,但是可以包含类而没有,还有像Nothing这样的类型,它们没有 甚至没有任何值,更不用说一个类了。

scala java 区别_Scala(和Java)中的类和类型之间有什么区别?相关推荐

  1. java 中操作字符串都有哪些类?它们之间有什么区别?

    java 中操作字符串都有哪些类?它们之间有什么区别? String.StringBuffer.StringBuilder String : final修饰,String类的方法都是返回new Str ...

  2. Gradle中的实现和编译之间有什么区别?

    本文翻译自:What's the difference between implementation and compile in Gradle? After updating to Android ...

  3. 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?

    本文翻译自:What is the difference between "screen" and "only screen" in media queries ...

  4. scala和java类_Scala(和Java)中的类和类型有什么区别?

    当你说"打字"时,我会假设你的意思是静态类型.但我很快就会讨论动态类型. 静态类型是程序的一部分的属性,可以静态证明(静态意味着"不运行它").在静态类型语言中 ...

  5. scala调用java代码_scala调用java代码

    scala调用java代码 @(SCALA)[scala] 在scala中调用java代替非常非常简单,直接调用即可 (一)一个简单示例 1.创建一个java类 package com.lujinho ...

  6. java建一个conversion_Scala中的JavaConverters和JavaConversions之间有什么区别?

    JavaConversions 提供了一系列隐式方法,可以在Java集合和最接近的相应Scala集合之间进行转换,反之亦然 . 这是通过创建实现Scala接口的包装器并将调用转发到底层Java集合或J ...

  7. java 枚举的继承_java中枚举类可以被继承吗?

    java 枚举类 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: ● 枚举类继承了java.lang.Enum类,而不是默认的Object类.而 ...

  8. Java中基本数据类型和Object之间的关系

    1.基本数据类型和Object之间是没有关系的 2.基本数据类型的包装类 例如int 的包装类Integer的父类则是Object 输入:12 解释:在赋值的过程中进行自动装箱

  9. java 可变 不可变_java中的不可变类型的探究

    不可变类是指创建类的对象实例后,该实例的属性不能发生改变.常见的String就是不可变类.不可变类型的属性值不会发生改变,这在多线程编程的时候非常有用,不用担心对象的属性值被修改. 下面我们来看看如何 ...

最新文章

  1. 字节跳动内部学习资料泄露!kafka入门教程
  2. 【Python】编程笔记3
  3. Shell脚本调试工具set
  4. 存储器容量扩展——位扩展、字扩展
  5. 解析Winndows 2000/XP物理内存管理
  6. vim php 配置文件,spacevimsetting
  7. python和lua哪个有前途_python和lua数据类型的比较
  8. wrong ELF class: ELFCLASS64
  9. 【校招VIP】产品行测之逻辑计算题
  10. 计算机软件卡死,电脑运行慢,卡或软件卡死无响应的解决方法
  11. Kotlin学习笔记八-数据代理类型,接口与抽象类
  12. Shaderlab 玻璃效果
  13. SQL --用户数据维护
  14. 计算机模拟仿真实例,计算机模拟仿真系统,computer simulation system,音标,读音,翻译,英文例句,英语词典...
  15. AndroidStudio请求网络数据,把解析出来的数据放在listview里
  16. 解决TypeError: set_ticks() takes 2 positional arguments but 3 were given
  17. 压力测试工具ab介绍
  18. CSS 中的边框和轮廓属性
  19. 编写HTML的一些小技巧(针对IE)
  20. 说词——浣溪沙 苏轼

热门文章

  1. 腾讯视频发布互动视频技术标准 爱奇艺、B站等均已布局
  2. 基于Linux和MiniGUI的嵌入式系统软件开发指南(六)
  3. 功能测试人员技能提升路线图,试从第一个脚步到年薪50W...
  4. Android studio 2.3版本出现的问题: Please select at least one of the signature versions to use
  5. rabbitmq-server 安装方法
  6. undo log mysql_MySQL的redo log与undo log
  7. rtmp httpflv 服务优化以及安全性分布式探讨
  8. 计算机网络实验_中心聚焦|山东省计算机网络重点实验室学术交流会议顺利召开...
  9. 【clickhouse】如何监控Clickhouse的连接数
  10. 95-10-200-启动-结尾