Scala之旅(TOUR OF SCALA)——泛型类(Generic Classes)

Java中的泛型方法(Generic Methods)和泛型类(Generic Classes) 在Java编程语言中,泛型(Generics)是一个强大的工具,它允许程序员在编写类、接口和方法时定义类型参数。这些类型参数在类、接口或方法被实例化时会被具体的类型所替代,从而提供了一种编写可重用、类型安全且易于维护的代码的方式。下面我们将从技术难点、面试官关注点、回答吸引力和代码举例四个方面来详细探讨Java中的泛型方法和泛型类。 阅读详情

泛型类是一种带了一个类型作为参数的类。他们对集合类是非常有用的。

定义一个泛型类(Defining a generic class)

泛型类使用中括号 [] 接收类型参数,虽然类型参数可以是任何名字,但是一个惯例是使用字母 A 作为类型参数标识符。

class Stack[A] {
    private var elements: List[A] = Nil
    def push(x: A) { elements = x :: elements }
    def peek: A = elements.head
    def pop(): A = {
        val = currentTop = peek
        elements = elements.tail
        currentTop
    } 
}

这个 Stack 泛型类使用 A 作为类型参数。这意味着在里面的列表,var elements: List[A] = Nil 只能存储类型为 A 的元素。方法 def push 只能接收类型为 A 的参数对象(注意:elements = x :: elements 意思是在 elements 的前面加入元素 x 生成一个新的列表,重新赋值回 elements)。

使用(Usage)

为了使用泛型类,我们需要使用一个具体的类来代替中括号中的 A 。

val stack = new Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop)
println(stack.pop)

实例 stack 只能接收 Int 类型的值。然而如果类型参数有子类,也可以接收子类的值。

class Fruit
class Apple extends Fruit
class Banana extends Fruit

val stack = new Stack[Fruit]
val apple = new Apple
val banana = new Banana

stack.push(apple)
stack.push(banana)

Apple 类和 Banana 类都是 Fruit 类的子类,所以我们可以将 Apple 和 Banana 的实例压入 Fruit 类型的栈中。

注意:泛型类型中的子类型是不变的(invariant)。这意味着如果我们有一个字符类型的栈 Stack[Char],那我们不能作为一个整型的栈 Stack[Int] 来使用。这是不安全的,因为它可以使我们输入真正的整数到字符栈中。总之,当且仅当 B = A 时,Stack [A] 只能是 Stack [B] 的一个子类型。这可能是相当严格的,所以 Scala 提供了一种类型参数注释机制 来控制泛型类中子类型的行为。

Scala(9) -- scala的包、样例类、样例对象 1. 包 2. 样例类 3. 样例对象 4. 案例 阅读详情

相关推荐

车辆横向控制MPC实战:从‘老王模型’到CasADi求解的保姆级避坑指南

本文详细解析了车辆横向控制MPC的实战应用,从经典动力学模型选择到CasADi求解器的优化配置,提供了一套完整的避坑指南。重点介绍了车辆动力学模型的验证要点、CasADi环境的高效配置技巧以及MPC问题建模的核心要素,帮助开发者快速实现稳健的横向控制方案。

weixin_42524499的博客 346

Java的泛型类(Generic Classes)、类型参数(Type Parameters)是什么

Java的泛型类(Generic Classes)是什么

听海边涛声 835

微分中值定理

文章目录证明根的存在性证明不等式微分中值定理有关的证明题解题方法题目1题目2题目3题目4题目5题目6题目7题目8(难) 微分中值定理:把函数改变量与一点的导数值联系起来 中值定理意义:将函数与导数联系起来 证明根的存在性 证明根的存在性:零点定理和罗尔定理 由于无法说明两端点异号,所以想罗尔定理 构造一个辅助函数,这个辅助函数的导数为要证的方程 这个辅助函数在两端点值相等,说明辅助函数的导数在0到1内存在0点。 这也就是为什么要构造一个导数为要证明的方程的原因 证明不等式 题目中出现了两点函

sparky的博客 4905

详解 Java 泛型(Generic)机制

泛型可以指定类型变量,从而让代码可以对不同类型的对象进行重用。以及,还可以让编译器更好的了解类型,从而避免强制类型转换,提升代码的安全性。

Airsaid 1697

双层优化入门(1)—基本原理与求解方法(附matlab代码)

双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。

配电网和matlab的博客 5万+

cesium 深度图(获取区域最高最低点位)

文章摘要: Cesium深度图技术可用于获取区域地形高程数据,核心实现步骤包括:1)通过离屏相机构建独立渲染环境,使用正交投影确保采样精度;2)采用离屏渲染技术获取均匀分布的地形点数据。关键技术点包含多边形外包矩形计算、后台相机配置(5km高度正交投影)、1024×1024像素离屏视图设置,以及深度数据解析(RGBA格式转换和三维坐标还原)。该方法避免了主视图干扰,可精准获取区域内地形高程信息,为填挖方分析等应用提供基础数据支持。

God's asylum的博客 283

Java语言十五讲(第五讲 Generics泛型)

前几次讲座,我们在程序里面看到了Generics,今天我们就来专门谈一谈。 先看Generics的作用:TheyweredesignedtoextendJava'stypesystemtoallow“atypeormethodtooperateonobjectsofvarioustypeswhileprovidingcompile-timetypesafety”。这里明白地指明了Generics泛型的两个用处,一是允许一个类或者方法操纵不同类型的对象,二是提...

qqqqqqhhhhhh的博客 281

第十届MathorCup高校数学建模挑战赛-B题:养老服务床位需求预测与运营模式研究

当养老床位数增加时存在的商机,提出了相应的养老服务床位的运营商业模式。就业的可能性,建立多目标规划模型,尽可能同时满足三方面的要求。务床位的需求、制定合理的养老服务床位发展规划,是构建和谐社会、幸福社会。问题一的床位需求与市场类型的分类结果,查找关于国内养老院的相关数据,探。求,又能持续发展养老事业,同时还能促进社会就业的养老服务床位运营的商业。养老服务床位数的增加能够带来的就业方面因素的影响,并对这些因素进行一个。你们的模型及其结论为科学依据,对政府管理部门针对养老床位规划提出合理的。

getusushu的博客 1139

Java:泛型(Generics)

Java:泛型(Generics)

听海边涛声 823

华为交换机系统软件升级和安全漏洞修复教程

在华为交换机国网可以查询到华为交换机官方电话:400-822-9999,通过下命令查询出需要升级的交换机软件版本和补丁版本号发给华为,获取新的升级系统软件和补丁以及升级教程。下面是我升级华为交换机总结的教程,作为参考。...

星如雨落 2965

华为OD机试真题 新系统【优化充电桩调度算法】

华为OD机试 新系统真题【优化充电桩调度算法】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【优化充电桩调度算法】

qq_45776114的博客 755

java 泛型 泛型类(Generic Classes)类型形参(Type Parameters)

类(class)的类型形参的作用范围是整个class,除了静态(static)成员和静态初始化模块. class Test <T> { static { Test<T> test = new Test<T>(); // error static initializer } private static T field; // error static field public static T method

Claroja 447

遥感影像道路提取算法——SGCN

用于从高分辨率遥感图像(TGRS)中提取复杂环境中道路的分割深度可分离图卷积网络摘要:高分辨率遥感图像的道路信息在各个领域得到广泛应用,基于深度学习的方法有效地显示了较高的道路提取性能。然而,在高分辨率遥感图像中,检测柏油路封闭或树木覆盖的道路,仍存在一些挑战,限制了提取的准确性:1)道路之间的阶级内差异较大,城市物体,特别是道路和建筑物之间的阶级间差异不明显;2)被树木、阴影和建筑物遮挡的道路难以提取;3)道路缺乏高精度遥感数据集。

littleyy666的博客 3845

【java总结】Genneric泛型

Genneric泛型 在JDK1.5时引进,是 Java 语言中类型安全的一次重要改进。举个例子,在没有泛型的时候,List里可以放入任意Object,有时我们一厢情愿地认为里面所有放的都是String,在使用的时候把内容提取出来都转成String类来用,然而,List里可以有其他类型,如int类型,自定义类等..这种代码在编译期间不会报错,直到运行时才出现问题。泛型的引进,修正了这种问题,一个

Mankind的博客 890

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

泛型

泛型 泛型即“参数化类型。”就是将声明时需要指定的类型也定义为参数。在具体使用时,再给定具体的类型。这样不用创建新类型,就可以由泛型来实现参数的多类型。 泛型有三种,分为泛型接口,泛型类,和泛型方法。 泛型接口 // 定义泛型接口 public interface Generator<T>{ public T next(); } //当一个类实现此接口时,如果不传入类型实参(即给定 T 的具体类型),则这个类也必须定义为泛型类。 class FunctionGenerator<T>

L_beaman的博客 403

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

泛型类java_Java泛型 - 通用类( Generic Classes)

Java泛型 - 通用类( Generic Classes)泛型类声明看起来像非泛型类声明,除了类名后跟一个类型参数部分。泛型类的类型参数部分可以有一个或多个用逗号分隔的类型参数。 这些类称为参数化类或参数化类型,因为它们接受一个或多个参数。语法 (Syntax)public class Box {private T t;}哪里Box - Box是一个通用类。T - 传递给泛型类的泛型类型参数...

weixin_36314117的博客 556

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

获得泛型(generic class)参数类型T的实际类型(actual type)

获得泛型(generic class)参数类型T,有可能会使用如下代码:Class<T> tClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];

zmscs的专栏 4287

Java中的泛型编程(generic programming)和泛型类(generic class)

泛型编程(generic programming)和泛型类(generic class)泛型编程(generic programming)意味着代码可以被不同类型的对象所复用。泛型类(generic class)就是可以被一个或多个类型对象所使用的类。如ArrayList泛型类。泛型类提供了类型参数(type parameter),如ArrayList<String> files = new Arr

lichengyu的专栏 3418

MFC class和Generic class的区别

MFC class: 建立基于MFC的类,比如视图,对话框,控件等等,都是从MFC类库派生,可以在Base class中选择父类。 Generic class: Generic的英文意思是一般的,泛的;  Genericclass就是自己写的类,普通C++类,没有派生始祖,包含头文件后,可以使用任何MFC类。使用Generic class,它可以不选择MFC中的类作为基类,

异度思想 8112

克服 JSR-14 原型编译器中泛型的限制

    Java 开发人员和研究员 Eric Allen 继续讨论 JSR-14 和 Tiger 中的泛型类型,并着眼于在泛型类型中添加 naked 类型参数的 new 操作支持这一分支。 这一系列主要讨论在 Java 编程中添加泛型类型,本文是其中的一篇,将研究还未讨论过的有关使用泛型的两个限制之一,即添加对裸类型参数的 new 操作的支持(如类 C&lt;T&gt; 中的 new T() )...

神爱凡人 190

vc中MFC Class,Generic Class,Form Class

MFC Class 表示你所建的类是MFC类的子类 Generic Class 表示你建的是一般的类 Form Class 表示你所建的类是MFC的相应Form类的子类

yuwei19840916的专栏 967

MFC class 和 Generic class 和Form Class使用详细区别

MFC class:  建立基于MFC的类,比如视图,frame,控件等等,从MFC类库派生,可以在Base class中选择父类。 Generic class: geniric    class就是自己写的类,普通C++类,没有派生始祖,包含头文件后,可以使用任何MFC类。使用 generic    class,它不选择MFC中的类作为基类,也就是没有基类,或者你手工在Bas

Linux内核老兵的AI战场专栏 1683

java 之 泛型的详细介绍

java 之泛型的详细介绍

牛牛博士博客 270

【Java -- 泛型(Generics)】

泛型 (Generics)是 JDK5 引入的特性,用以提供编译时类型安全检测机制,该机制允许在编译时检测到非法类型。其本质是参数化类型,也即所操作的数据类型被指定为一个参数。参数化类型指将具体的类型参数化,使用/调用时传入具体的类型。其可以用在类、方法和接口中,分别称为泛型类、泛型方法和泛型接口。泛型的好处在于将一些运行时的问题提前到编译期间,在编译期间得以发现。同时避免了强制类型转换。

qq_45312083的博客 483

Scala之旅-解析(FOR COMPREHENSIONS)和泛型类(GENERIC CLASSES)

Scala 为表达序列解析提供了轻量级的符号。 解析器具有 for (enumerators) yield e 形式,其中 enumerators 是一个以分号分隔的枚举器列表。一个 枚举器要么是一个引入新变量的生成器,要么是一个过滤器。解析器对枚举器生成的每一个绑定的主体 e 进行评估计算,并返回这些值的序列。 看下面这个例子: case class User(val name: Strin...

朝花夕拾 505

Java泛型 翻译泛型方法

翻译泛型表达式、泛型

luotuomianyang的博客 2191
上一篇: Scala之旅(TOUR OF SCALA)——解析器对象(EXTRACTOR OBJECTS)
下一篇: Scala之旅(TOUR OF SCALA)——变化 (VARIANCES)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值