Scala Parameterized Types_参数化类型_泛型

Scala supports parameterized types, which are very similar to generics in Java. (We could use the two terms interchangeably(可交换的),

but it’s more common to use “parameterized types” in the Scala community and “generics” in the Java community.) The most obvious difference is in the

syntax, where ????????Scala uses square brackets ([...] ), while Java uses angle brackets (<...>).????????

用类型参数化类

For example, a list of strings would be declared as follows:

class GenCell[T](init: T) {
  private var value: T = init

  def get: T = value

  //Unit相当于返回void
  def set(x: T): Unit = {

    value = x
  }
}

在上面的定义中,“T”是一个类型参数,可被用在GenCell类和它的子类中。类参数可以是任意(arbitrary)的名字。用[]来包围,而不是用()来包围,用以和值参数进行区别。

用类型参数化函数

如下代码示例

class GenCell[T](init: T) {
  private var value: T = init

  def get: T = value

  //Unit相当于返回void
  def set(x: T): Unit = {

    value = x
  }
}

object app_main_7 extends App {

  //用T参数化函数
  def swap[T](x: GenCell[T], y: GenCell[T]): Unit = {
    val t = x.get;
    x.set(y.get);
    y.set(t)
  }

  val x: GenCell[Int] = new GenCell[Int](1)
  val y: GenCell[Int] = new GenCell[Int](2)
  swap[Int](x, y)

  println(x.get)
  println(y.get)
}

参考:https://github.com/wecite/papers/blob/master/An-Overview-of-the-Scala-Programming-Language/5.Abstraction.md

时间: 2024-11-25 13:14:21

Scala Parameterized Types_参数化类型_泛型的相关文章

C#基础加强_泛型的基本原理

小弟初写博文,深感“易敲千行码,难下百余文”的道理. 内容粗略浅薄,望各位大神海涵! 动态数组ArrayList可以实现不断的增长,让我们感受到了在某些地方较数组有优越感.但它包含的数组类型是object类,意味着需要转为数组时,存在拆装箱操作,这带来不必要的麻烦,也损失了性能.而List<T>泛型集合的出现便大大解决了上述问题. //泛型 --泛指某一个类型.这种类型需要用户自己确定 List<string> lists = new List<string>(); /

Java技术_Java千百问(0040)_泛型是什么

点击进入_更多_Java千百问 1.什么是泛型 泛型是Java SE 1.5的新特性,泛型即参数化类型,也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. 如何使用泛型方法.泛型类/接口看这里:泛型如何使用 在没有泛型的情况的下,通过对类型Object的引用来实现参数的"任意化","任意化"带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的. 对于强

【JavaSE】day04_Collection_Iterator_新循环_泛型

1.Collection集合的批量操作 1)boolean addAll(Collection c) 将给定的集合中的所有元素添加到当前集合中. 当执行完毕后,当前集合中的元素发生改变则返回true. 2)boolean containsAll(Collection c) 判断当前集合中是否包含给定集合里的所有元素,全部包含则返回true. 这里判断的依据依然是依靠元素的equals比较的. 代码演示: package day04; import java.util.ArrayList; imp

Java技术_Java千百问(0041)_泛型如何使用

点击进入_更多_Java千百问 1.如何使用泛型方法 了解什么是泛型看这:泛型是什么 以下是定义泛型方法的规则: 声明泛型方法时,在返回类型之前,需要有一个由尖括号(< >)分隔的泛型类型部分. 2 . 一个泛型类型,也称为类型参数,是一个标识符,用于指定一个泛型类型的名称. 类型参数可以用来声明返回类型和充当占位符传递给泛型方法. 泛型方法的身体与其他方法一样. 例子: public class GenericMethodTest { // generic method printArray

JAVA基础_泛型

什么是泛型 泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉"类型"信息,是程序的运行效率不受影响,对于参数化的泛型类型,getClass()方法返回值和原始类型完全一样.由于编译生成的字节码会擦除泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,然后再调用add()方法即可 GenericDemo.java public class GenericDemo

J2SE之容器_Map 接口_泛型

Map 接口 Map方法举例 import java.util.*; public class TestMap2 { public static void main(String args[]) { Map<String, Integer> m1 = new HashMap<String , Integer>(); m1.put("one", 1); m1.put("two", 2); m1.put("three", 3)

(整理)C#基础知识_泛型的实现

本文是截取自MSDN的文章部分,方便自己查看,原文地址:https://msdn.microsoft.com/zh-cn/library/ms379564(VS.80).aspx 泛型实现 表面上,C# 泛型的语法看起来与 C++ 模板类似,但是编译器实现和支持它们的方式存在重要差异.正如您将在后文中看到的那样,这对于泛型的使用方式具有重大意义. 注 在本文中,当提到 C++ 时,指的是传统 C++,而不是带有托管扩展的 Microsoft C++. 与 C++ 模板相比,C# 泛型可以提供增强

Net学习日记_泛型与反射

真正的重载:两个带不同个数的类型参数的泛型方法构成重载(overload) 泛型方法的类型参数和方法参数列表都是构成重载的元素. 子类重写父类方法的是方法体实现代码,而不是方法签名.

Scala笔记整理(八):类型参数(泛型)与隐士转换

[TOC] 概述 类型参数是什么?类型参数其实就是Java中的泛型.大家对Java中的泛型应该有所了解,比如我们有List list = new ArrayList(),接着list.add(1),没问题,list.add("2"),然后我们list.get(1) == 2,对不对?肯定不对了,list.get(1)获取的其实是个String--"2",String--"2"怎么可能与一个Integer类型的2相等呢? 所以Java中提出了泛型的