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中大家最熟悉不过的就是实现类本身实 ...
随机推荐
- day01-基础内容
day01-基础内容 1.Linux: 1)开源的操作系统.免费的 主要用于服务器端,而Java主要是服务器端开发 2)Linux与Windows目录结构的区别: 2.1)文件系统不同 ...
- php猴子称王或者约瑟夫难题
问题描述: 一群猴子排成一圈,按1,2,...,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为 ...
- Exception not a valid month
oracle中的to_date('date','pattern') 其中的date和pattern格式应该要一样 SELECT to_date('2016-03-29 00:00:00','yyyy- ...
- Ninject简单的Demo
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 第一篇 Integration Services:SSIS是什么
本篇文章是Integration Services系列的第一篇,详细内容请参考原文. Integration Services是一种在SQL Server中最受欢迎的子系统.允许你在各种数据源之间提取 ...
- iOS面试必看,最全梳理
序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了.今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态 ...
- DG - 将physical standby置于read-only模式
1.备库处于关闭状态 SQL> startup ORACLE instance started. Total System Global Area 430075904 bytes Fixed S ...
- 生成arff文件,csv转为arff
一.什么是arff格式文件 1.arff是Attribute-Relation File Format缩写,从英文字面也能大概看出什么意思.它是weka数据挖掘开源程序使用的一种文件模式.由于weka ...
- 安装windowbuilder错误一例
eclipse是3.7版本,安装了windowbuilder,大致步骤如下: http://www.cnblogs.com/gladto/archive/2011/07/21/2112836.html ...
- java 获取当前系统系时间
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 SimpleDateFo ...