首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

scala 学习笔记(03) 参数缺省值、不定个数参数属性(Property)、泛型初步

继续学习,这一篇主要是通过scala来吐槽java,同样是jvm语言,差距咋就这么大呢?...要不是遇到scala,我还真就信了,你看看人家scala同学,2003/2004发布,早就把这些全实现了,而java同学作为jvm元老,这些年一直顽固不化,不思进取,已经被jvm其它同学远远甩在后面了...没有传任何参数,但从反编译结果看,最终还是变成了add(Nil..MODULE$)),编译器自动加了一个参数,以满足java规范。...,可以向上转型为Object[],这下可好了,Object是万能类型,如果向这个万能类型数组里加入一个不是SampleClass实例,理论也是允许,这就违背了泛型约束初衷。...,scala早就看穿了这一切,因此它采用了一种略带"极端"做法,直接使用原始类型,无情对java泛型机制回应:『不约,我们不约』。

1.4K60
您找到你想要的搜索结果了吗?
是的
没有找到

UnrealEngine4 源码剖析 (一) UObject 概览及反射系统

仔细想一想,其实要实现语言层面的自省与反射,是很简单,只需要在编译字节码 / 二进制时候额外写入、属性、方法类型信息即可。...有一个自己预编译器,叫做 MOC,在源码输入编译器之前,会先经过 MOC 处理一遍,Q_OBJECT 是一个空,它作用很简单,就是告诉 MOC 分析头文件中、属性、方法类型信息,然后生成对应展开...,再把这些额外生成展开一起丢进编译器编译,最后全自动生成类型信息,这样就可以使用反射系统了,具体原理大家可以自己去了解一下。...UClass:表示 C++ 中,在 UStruct 基础扩展了 UFunction 保存与查找方法。...UScriptStruct: 表示 C++ 中结构体,只是在 UStruct 基础增加了一些工具方法而已。 结合我提供图和说明,就能大致了解到类型系统全貌了。

2.5K10

Scala 枚举使用和探索(译)

:( ") } } 在Scala中,我们严重依赖于编译器强大类型系统,使用这种方法,编译器不能找到非穷尽模式匹配子句,也不能对不同枚举使用重载方法。...itemized为枚举提供了密封特质层次结构(sealed trait hierarchies)类型,回到我们之前例子: import io.rbricks.itemized.annotation.enum...由于部分工作是由完成,在这一点,无法传递这些值 尽管它提供了索引值,但枚举值仍然没有默认顺序(order on enumeration values) enumeratum Enumeratum是一个类型安全且功能强大...,enumeratum还提供: 列出可能值(因为这些值需要在Enum继承实现) 默认序列化/反序列化方法(有和没有异常抛出) scala> Weekday.withName("Monday") res0...反序列化默认方法 列出所有可能值 在枚举值添加额外字段 排序 编译自:Scala Enumerations

2.1K40

从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)

我在之前已经介绍过编程范型概念,而事实,我们到现在为止,纠结在这四门迥异语言上面,浅看是各种语言特性,深看就是编程范型和思维方法。...Java 和 JavaScript 位列其中,从表中分别可以看出二者分别:因为 Java 有线程概念,可以写并发编程范型代码;有泛型定义,可以进行泛型编程;有专门 Class ,可以反射和自省...它本身可以称为真正 “non-strict programming language”,换言之,function 参数可以不被计算出来,真正实现无限集合 lazy 计算。...介绍了这几种语言类型系统基础;还有几个对结构描述基础概念,包括函数、、接口和型别。...工作需要,要开始学习 Scala 了,我本来对 Scala 认识水平仅仅停留在 “了解” 基础之上,通过最近这段时间学习,我发现有了 Groovy 和 Haskell 基础以后,再来看 Scala

48010

Null 值及其处理方式

C 表示方案 在 C++ 中,Bjarne Stroustrup 出于兼容 C 语言考量保留了这个,但是 Stroustrup 是反对使用 NULL ,他更偏爱直接使用 0 3,毕竟用可能会导致一些混乱...这个处理咋看之下非常奇怪,但这其实与 Java 编程模型有关,在 Java 中,类型除了少数几个基本类型之外都是类型,而我们无法像在 C++ 中那样直接操作类型值,我们只能隐式地操作指针,而这个...利用参数类型表示 事实,null 表达只不过是一个可选值或状态,可能有值,可能没有,这就有了另一种处理 null 方式,它来源于 ML 系语言(例如:SML,OCaml,Haskell 等)...它们使用参数类型来表示 null 这个概念。例如在 Scala 中,有一个 Option[T] 8 类型,对于一个可能为空对象,不将其类型设置为 T 而是设置为 Option[T]。...协变、逆变与不变 一文中谈过,Java 无法在参数类型声明时候指定其在其类型参数型变类型,相对于 Scala 中直观写法,为了使用 Optional,在 Java 中我们必须要这样写: Optional

1.1K40

Scala实现一个简单双向队列

作为一门Scalable语言,Scala允许使用者也可以开发一个类似内置列表数据结构。在这篇文章会简单实现一个函数式双向队列,也以此来展示类型参数和如何做简单信息隐藏。...Begin: 类型参数可以让我们编写泛型和特质,例如列表就是泛型,定义为List[T],它实例可以为List[Int],List[String]等。...现在Deque还没有构造参数,再补充: class Deque[T](elems:List[T]){ } 为了简便实现,函数式双向队列采用了内置列表,现在Deque可以传入一个参数elems。...{ case List() => new Deque(List(x)) case _ => new Deque(List(x) ::: elems) } 将完整Deque输入到REPL:...) scala> deque.pushLeft(0) res3: Deque[Int] = Deque(0,1,2,3,4) 看,借助了Scala强大类型参数,现在这个函数式双向队列可以做到和原生列表一样使用

62110

Scala语言入门:初学者基础语法指南

作为一种在Java虚拟机(JVM)运行静态类型编程语言,Scala结合了面向对象和函数式编程特性,使它既有强大表达力又具备优秀型态控制。...这意味着Scala程序可以与Java程序互操作,并且可以利用JVM优化和性能。 在语法Scala和Java有一些区别。...特质 在Scala中,是单继承,但是特质(trait)可以多继承。 这意味着,一个只能继承一个父,但可以继承多个特质。这样,从结果看,就实现了多重继承。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型。在 Scala 中,可以使用 + 符号来表示协变。...逆变 逆变(Contravariance): 逆变表示类型参数在子类型关系中具有相反方向。如果一个泛型类型参数是逆变,那么子类型关系将反转,即父类型可以替换为子类型

20920

Scala语言入门:初学者基础语法指南

作为一种在Java虚拟机(JVM)运行静态类型编程语言,Scala结合了面向对象和函数式编程特性,使它既有强大表达力又具备优秀型态控制。...这意味着Scala程序可以与Java程序互操作,并且可以利用JVM优化和性能。 在语法Scala和Java有一些区别。...特质 在Scala中,是单继承,但是特质(trait)可以多继承。 这意味着,一个只能继承一个父,但可以继承多个特质。这样,从结果看,就实现了多重继承。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型。在 Scala 中,可以使用 + 符号来表示协变。...逆变 逆变(Contravariance): 逆变表示类型参数在子类型关系中具有相反方向。如果一个泛型类型参数是逆变,那么子类型关系将反转,即父类型可以替换为子类型

24120

Scala语言入门:初学者基础语法指南

作为一种在Java虚拟机(JVM)运行静态类型编程语言,Scala结合了面向对象和函数式编程特性,使它既有强大表达力又具备优秀型态控制。...这意味着Scala程序可以与Java程序互操作,并且可以利用JVM优化和性能。 在语法Scala和Java有一些区别。...特质 在Scala中,是单继承,但是特质(trait)可以多继承。 这意味着,一个只能继承一个父,但可以继承多个特质。这样,从结果看,就实现了多重继承。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型。在 Scala 中,可以使用 + 符号来表示协变。...逆变 逆变(Contravariance): 逆变表示类型参数在子类型关系中具有相反方向。如果一个泛型类型参数是逆变,那么子类型关系将反转,即父类型可以替换为子类型

21210

Scala学习笔记

# 定义变长参数函数         # String* 表示接受一系列String类型值,类似于java语言可变参数         # 内部来说:变长函数类型实际是一个数组...特征:相当于Java中接口,实际他比接口功能强大.         2)与接口不同是:是可以定义属性和方法实现         3)一般情况下scala只能被继承单一父,但是如果是trait...高级内容:泛型     (*)泛型         泛型声明时名后面括号中即为类型参数),顾名思义,其实就是在声明中,定义一些泛型类型,然后在内部,比如field、method,就可以使用这些泛型类型...)scala或者特征泛型定义中,如果在类型参数前面加入+符号,就可以使或者特征变成协变了                 参考CovarianceDamo代码             2:逆变概念...:(泛型变量值可以是本身或者其父类型)在或者特征定义中,在类型参数之前加上一个-符号,就可以定义逆变泛型和特征了                 参考ContravanceDemo代码

2.6K40

Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、

class与模式匹配: Scala中提供了一种特殊,用case class进行声明,中文也可以称做样例。...也是定义一种类型参数,比如在集合,在,在函数中,定义类型参数,然后就可以保证使用到该类型参数地方,就肯定,也只能是这种类型。从而实现程序更好健壮性。...使用泛型,通常是需要对某些成员,比如某些field或者method中参数或者变量,进行统一类型限制,这样可以保证程序更好健壮性和稳定性。...如果不使用泛型进行统一类型限制,那么在后期程序运行过程中,难免出现问题,比如传入了不希望类型,导致程序出现问题。在使用时候,比如创建对象,将类型参数替换为实际类型,即可。...Scala上下边界特性允许泛型类型必须是某个子类,或者必须是某个

2.9K50

Scala语言入门:初学者基础语法指南

作为一种在Java虚拟机(JVM)运行静态类型编程语言,Scala结合了面向对象和函数式编程特性,使它既有强大表达力又具备优秀型态控制。...这意味着Scala程序可以与Java程序互操作,并且可以利用JVM优化和性能。在语法Scala和Java有一些区别。...特质在Scala中,是单继承,但是特质(trait)可以多继承。这意味着,一个只能继承一个父,但可以继承多个特质。这样,从结果看,就实现了多重继承。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型。在 Scala 中,可以使用 + 符号来表示协变。...类型限界在 Scala 中,类型上界(Upper Bounds)和类型下界(Lower Bounds)是用于限制泛型类型参数范围概念。它们允许我们在泛型或泛型函数中指定类型参数必须满足某种条件。

23120

写一个去除实体参数中String类型空格和换行工具

系统中数据经常会进行新增或者更新,正常情况下如实保存就行,特殊情况下则需要对传进来参数进行一些特殊处理,比如说去掉前后空格或者去掉换行或者中间若干个空格,来使数据更加严谨和准确,排除掉烂数据。...(还有一大部分原因就是测试角度太刁钻) 所以经常会对每个参数进行单独处理,所以封装一个处理工具,简化数据处理过程。...* @param typeReference 转换类型 * @return T * @throws * @author Surpass * @...* @param typeReference 转换类型 * @param isInclude 是否包含keys中字段 * @param keyList...} return JSON.parseObject(JSONObject.toJSONString(hashMap), typeReference); } } 测试

2.5K30

Scala语法介绍

5.如果scala调用方法只有一个参数,则.()可以省略。     6.如果函数方法体只有一行代码,则方法体{}可以省略。     7.如果函数参数类型可以被推断出来,则类型可以省略。     ...其实可以认为scala中并没有真正意义基本类型(如java中基本类型),以上九种基本类型其实也出在包下是一个。     ...在scala中以上基本数据类型区别于其他地方在于,他们对象都已直接量形式体现。     以上基本数据类型直接量和java中基本完全相同,不再复述。     ...这九个直接量在需要时可以自动被转换为其对应富包装来调用,富包装提供额外方法。     每种数据类型都提供了很多方法供调用,所以scala数据类型不同于java基本类型。...2.字符串操作     事实ScalaString就是JavaString,所以可以直接调用Java里String所有方法。

1.1K50
领券