scala泛型
package com.ming.test /**
* scala泛型
* 类型参数测试
*/
object TypeParamsTest { //泛型函数
def getMiddle[T](a:Array[T])=a(a.length/2) //类型通配符
def process1(people:java.util.List[_<:Student])={} def main(args: Array[String]): Unit = {
val p=new Pair(42,"String")
val p2=new Pair[Any,Any](42,"ddd") val c=new Compare("A","B");
println(c.smaller)
} }
//定义一个类型参数的类
class Pair[T,M](var one:T,var two :M) //T必须是Comparable[T]的子类型.
class Compare[T<:Comparable[T]](val one:T,val two : T){
def smaller=if(one.compareTo(two)<0) one else two
} //视图界定
/**
* <%关系意味这T可以被隐式转换成Comparable[T],还可以用Ordered特质
*/
class PairT[T <% Comparable[T]] class PairTT[T <% Ordered[T]](val one:T,val two:T){
def smaller=if(one<two) one else two
} //上下文界定
class P[T : Ordering](val one:T,val two:T){
def smaller(implicit ord: Ordering[T])=
if(ord.compare(one, two)<0) one else two
} //Manifest上下文界定
class ManfiestTest{
def makePair[T : Manifest](one:T,two :T){
val r=new Array[T](2)
r(0)=one
r(1)=two
}
} //多重界定,其实就是限定类型范围
class A[T <:Comparable[T] with Serializable with Cloneable] class B[T <% Comparable[T] <% String] class C[T : Ordering : Manifest] class D[T >: String <:String] abstract class List[+T]{
def isEmpty :Boolean
def head :T
def tail: List[T]
} object Empty extends List[Nothing]{
def isEmpty=true
def head=throw new UnsupportedOperationException
def tail=throw new UnsupportedOperationException } class Student{}
scala的泛型比java的要复杂点
scala泛型的更多相关文章
- Scala泛型详解
在Scala中你可以使用类型参数来实现类和函数,这样的类和函数可以用于多种类型.比如Array[T] 你可以存放任意指定类型T的数据. 类.特质.函数都可以有类型参数:将类型参数放在名字后面用方括号括 ...
- Scala泛型[T]的使用
package com.dtspark.scala.basics /** * 1,scala的类和方法.函数都可以是泛型. * * 2,关于对类型边界的限定分为上边界和下边界(对类进行限制) * 上边 ...
- 17. Scala泛型、上下界、视图界定、上下文界定
17.1 泛型的基本介绍 17.1.1 基本介绍 1) 如果我们要求函数的参数可以接受任意类型,可以使用泛型,这个类型可以代表任意的数据类型 2) 例如List,在创建List时,可以传入整型.字符串 ...
- 一文详解scala泛型及类型限定
今天知识星球球友,微信问浪尖了一个spark源码阅读中的类型限定问题.这个在spark源码很多处出现,所以今天浪尖就整理一下scala类型限定的内容.希望对大家有帮助. scala类型参数要点 1. ...
- Scala进阶之路-Scala中的泛型介绍
Scala进阶之路-Scala中的泛型介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 通俗的讲,比如需要定义一个函数,函数的参数可以接受任意类型.我们不可能一一列举所有的参数类 ...
- Scala入门到精通——第十六节 泛型与注解
本节主要内容 泛型(Generic Type)简单介绍 注解(Annotation)简单介绍 注解经常使用场景 1. 泛型(Generic Type)简单介绍 泛型用于指定方法或类能够接受随意类型參数 ...
- scala的泛型浅析
1. scala泛型浅析 package com.dtspark.scala.basics /** * 1,scala的类和方法.函数都可以是泛型. * * 2,关于对类型边界的限定分为上边界和下边界 ...
- Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变
1 泛型 1)如果我们要求函数的参数可以接受任意类型.可以使用泛型,这个类型可以代表任意的数据类型. 2)例如 List,在创建 List 时,可以传入整型.字符串.浮点数等等任意类型.那是因为 Li ...
- Scala进阶之路-Scala中的Ordered--Ordering
Scala进阶之路-Scala中的Ordered--Ordering 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 说道对象的比较,在Java中大家最熟悉不过的就是实现类本身实 ...
随机推荐
- JavaScript:JavaScript语法的详细介绍
JavaScript语法:只要Java会了,基本上javascript语法就会了. ——变量的定义 ——程序的结构控制 ——数组操作 ——函数的定义即使用 基本的test.html代码如下,它会导入下 ...
- Vue.2.0.5-计算属性
计算属性 在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> { ...
- Azure Remote Desktop: "An error occurred while loading from file *.rdp"
Tonight I deployed a new cloud service where I needed remote desktop to check on some things. After ...
- UIButton详解
// ----------------------------------UIButton------------------------------ // UIButtonTypeSystem 点击 ...
- jquery对strutrs2 <s:radio>标签的设置和取值
今天郁闷了1小时. 需求是这样的: <s:radio list="#{0:'男',1:'女'}" value="member.sex" id=" ...
- 理解MapReduce
理解MapReduce Hadoop的MapReduce过程具有如下形式: 1) map: (K1, V1) => list(K2, V2) 2) redu ...
- node.js学习(1)
新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...
- swift语言实战晋级-第9章 游戏实战-跑酷熊猫-7-8 移动平台的算法
在上个小节,我们完成了平台的产生.那么我们来实现一下让平台移动.平台的移动,我们只需要在平台工厂类中写好移动的方法,然后在GameScene类中统一控制就行了. 在GameScene类中,有个upda ...
- Climbing Stairs - Print Path
stair climbing, print out all of possible solutions of the methods to climb a stars, you are allowed ...
- websotrm注册码
webStorm : UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA ...