使用类型参数化数组

什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢? 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参), 然后在使用/调用时传入具体的类型(类型实参)。 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中, 操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛. 阅读详情

在 Scala 中, 你可以使用 new 来实例化一个类。当你创建一个对象的实例时,你可以使用数值或类型参数。如果使用类型参数,它的作用类似 Java 或 .Net 的 Generic 类型。所不同的是, Scala 使用方括号来指明数据类型参数,而非尖括号。比如:

val greetString = new Array[String](3)
greetString(0)="Hello"
greetString(1)=","
greetString(2)="world\n"
for(i <- 0 to 2)
    print(greetString(i))

可以看到 Scala 使用 [] 来为数组指明类型化参数,本例使用 String 类型,数组使用 () 而非 [] 来指明数组的索引。其中的 for 表达式中使用到 0 to 2 ,这个表达式演示了 Scala 的一个基本规则,如果一个方法只有一个参数,你可以不用括号和 . 来调用这个方法。

因此这里的 0 to 2, 其实为 (0).to(2) 调用的为整数类型的 to 方法,to 方法使用一个参数。Scala 中所有的基本数据类型也是对象(和 Java 不同),因此 0 可以有方法(实际上调用的是 RichInt 的方法),这种只有一个参数的方法可以使用操作符的写法(不用 . 和括号),实际上 Scala 中表达式 1+2 ,最终解释为 (1).+(2)+ 也是 Int 的一个方法,和 Java 不同的是,Scala 对方法的名称没有太多的限制,你可以使用符号作为方法的名称。

这里也说明为什么 Scala 中使用 () 来访问数组元素,在 Scala 中,数组和其它普遍的类定义一样,没有什么特别之处,当你在某个值后面使用 () 时,Scala 将其翻译成对应对象的 apply 方法。因此本例中 greetStrings(1) 其实调用 greetString.apply(1) 方法。这种表达方法不仅仅只限于数组,对于任何对象,如果在其后面使用 () ,都将调用该对象的 apply 方法。同样的如果对某个使用 () 的对象赋值,比如:

greetStrings(0)="Hello"

Scala 将这种赋值转换为该对象的 update 方法, 也就是 greetStrings.update(0,”hello”) 。因此上面的例子,使用传统的方法调用可以写成:

val greetStrings =new Array[String](3)
greetStrings.update(0,"Hello")
greetStrings.update(1,",")
greetStrings.update(2,"world!\n")
for(i <- 0 to 2)
  print(greetStrings.apply(i))

从这点来说,数组在 Scala 中并不某种特殊的数据类型,和普通的类没有什么不同。

不过 Scala 还是提供了初始化数组的简单的方法,比如上面的例子数组可以使用如下代码:

val greetStrings =Array("Hello",",","World\n")

这里使用 () 其实还是调用 Array 类的关联对象 Array 的 apply 方法,也就是:

val greetStrings =Array.apply("Hello",",","World\n")
Java案例:参数化类型数组 package net.hw.generic; import java.time.LocalDate; /** * Created by howard on 2018/1/31. */ public class GenericDemo01 { public static void main(String[] args) { Test&lt;String&gt;[] ... 阅读详情

相关推荐

33、Scala 类型参数化:深入理解方差、下界与对象私有数据

本文深入探讨了 Scala 类型参数化的关键特性,包括数组的不变性、方差注解的检查机制、下界与逆变的应用场景以及对象私有数据的实现细节。通过具体示例和编译器规则分析,帮助开发者理解如何在实际编程中合理使用这些特性,以提高代码的安全性与通用性。

julia4scientist的博客 99

String基本方法(一)

subString(a,b) 截取a ,a+1,.....不包含b 长度为(b-a) 拼接:用加号拼接两个字符串 一个为非字符串,进行拼接后将自动转为字符串 不可变字符串 编译器可以让字符串共享 检测字符串是否相等 s.equals() s.equalsIgnoreCase(); 一定不能使用==运算符检测两个字符串是否相等 !这个字符串只能够确定两个字符串是否放置同

何厚勋 331

无人机蜂群联合指挥作战技术详解

随着人工智能、通信技术、新材料等领域的不断进步,无人机蜂群联合指挥作战技术将迎来更加广阔的发展前景。未来,无人机蜂群将更加智能化、自主化,能够执行更加复杂、精细的作战任务。同时,加强国际合作,共同制定国际规则和标准,将是推动无人机蜂群技术健康发展的重要方向。无人机蜂群技术,是指通过先进的通信技术、自主导航与决策算法,将大量小型、低成本、功能各异的无人机组织成一个高度协同的群体,执行复杂多样的军事任务。2. 通信与数据链:采用高速、低延迟、抗干扰的通信技术,保障群体内无人机间的信息交换。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1546

java 参数化类型数组

java核心卷一,第八章泛型程序设计,p338,泛型限制,不能构建参数化类型的数组

weixin_51332452的博客 588

Ubuntu22.04下安装LDAP

在Ubuntu22.04的时候可以使用apt的方式来安装,在安装LDAP的web 服务器的时候可以考虑选择 LDAP 帐户管理器 (LAM)。因为 PHPLDAPadmin 安装时需要 php 的环境依赖,相对来说安装麻烦。此外在 PHPLDAPadmin 中创建组织和用户时与平常的语法有很大不同,对新手来说不友好。

dl_11的博客 3944

MATLAB实战:用Costas环和Gardner环搞定QPSK同步问题(附完整代码)

本文详细介绍了如何使用MATLAB实现Costas环和Gardner环联合解决QPSK同步问题,包括载波同步和定时同步的技术原理、MATLAB代码实现及性能分析。通过完整的仿真示例和工程实践建议,帮助读者掌握QPSK同步技术的核心要点,提升数字通信系统的解调性能。

agile9scrum的博客 691

JUnit5参数化测试的几种方式!

参数化测试生成的test,JUnit Jupiter给定了默认名字,我们可以通过name属性进行自定义。注意如果要显示'apple',需要使用两层''apple'',因为name是MessageFormat。

测试界的彭于晏的博客 397

PT静态时序分析实战:从基础命令到高级报告解析

本文详细介绍了PT(PrimeTime)静态时序分析(STA)的实战技巧,从基础命令如pt_shell和report_timing的使用,到高级报告解析与问题排查。通过丰富的实例和脚本示例,帮助工程师快速掌握时序分析的核心技能,提升芯片设计验证效率。

weixin_29289821的博客 954

不能创建参数化的泛型数组

参数化的泛型数组

m0_53315813的博客 626

深入解析EXI协议在ISO15118-2命令测试中的编解码实践

本文深入探讨了EXI协议在ISO15118-2车桩通信标准中的关键作用与实践方法。EXI编解码测试是确保通信准确性与效率的核心环节,文章详细介绍了从搭建测试环境、选择工具库到编写完整测试代码的全过程,并分析了结果差异的常见原因与调试技巧,为电动汽车充电系统的开发者提供了实用的技术指南。

potato的博客 1048

GStreamer 源代码入门

GStreamer 是一个高度模块化的多媒体框架,其源代码结构清晰,设计精良。

深之JohnChen的专栏 954

C语言中数组变量作为函数参数传值的两种方式:数组类型 & 指针类型 以及“C语言中数组变量(名)的本质是指针变量”

可是当使用了两种方法传递数组到另一个被调函数之后,在被调函数内部可以发现sizeof拿不到数组的长度,而是单个指针变量的size。我在 main 函数中定义了一个数组,要将该数组作为参数传递给其他方法。可以当把这个数组作为参数传到另一个方法的时候,在另一个方法中无法用同样的方法计算得出数组长度。下图中:在main方法中声明了数组,可以通过sizeof计算出数组长度:20字节。注意,C语言中数组作为函数参数时,数组长度无法在被调用函数中计算,所以。在此处返回的是指针变量的size,而非数组本身的size。

wuyujin1997的博客 5195

【NodeRed】node-red-contrib-opcua实现PLC读写

在之前的博文【Node-RED】node-red-contrib-opcua-server模块使用(1)中,我们介绍了用node-red-contrib-opcua-server模块实现OPCUA服务端的,以及二次开发的内容。本节博文中我们采用官方社区自带的node-red-contrib-opcua组件开展对OPCUA客户端的介绍,详细阐述用该组件中OpcUa-Client节点实现客户端对PLC的读写,以及实现过程中遇到的问题。由于官方社区中并没有找到该组件的介绍实例,这也是本博文编写的第1个原因。

weixin_48618536的博客 960

java不能创建参数化类型的泛型数组

在java泛型中是不能实例化参数化类型的数组的,例如: Pair<String>[] table = new Pair<String>[10]; //Error 这是为什么呢?其实主要是为了避免数组里出现类型不一致的元素。 我们先看一下,数组是否可以存储其它类型元素 Pair[] table = new Pair[10]; table[0] = new Object();...

qq_41286138的博客 3219

C# 上位机之海康工业相机开发(SDK)实战教程

海康工业相机的C#开发核心是基于MVS SDK的“初始化→枚举→连接→采集→释放”流程,其中图像回调处理和格式转换是关键。严格按照SDK文档处理设备类型(网口/USB)和像素格式;及时释放图像资源,避免内存泄漏;错误码是排查问题的重要依据(可参考SDK中的“错误码说明”文档)。掌握这些基础后,可结合机器视觉算法(如OpenCV)实现缺陷检测、尺寸测量等高级功能,构建完整的工业视觉系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3834

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

黑马程序员--04.泛型深入--02【参数化类型的特点】

泛型深入--2 参数化类型的特点 ----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------   参数化类型的特点 1). 类型化不具有继承性 参数化类型是不考虑在中传入的具体化的类型参数之间是否存在继承性。 【例子1】Vector v =new Vector();//X 【例子2】Vector v =new

歆明正航的专栏 1686

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

scala编程系列(2)-scala数组Array

1.使用类型参数化数组 scala里使用new实例化对象,和jva

萧然 1212

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

比较ArrayList与一般数组

比较ArrayList与一般数组 1、一般数组在创建时就必须确定大小 但对干ArrayList来说,你只需要创建出此类型的对象就行。它不需要指定大小,因为它会在加入或删除元素时自动地调整大小。 new String[2];  //需要制定大小 new ArrayList ();  //不需要指定大小 2、存放对象给一般数组时必须指定位置 (必须要指定介于0到比length小1

知识源于积累 811

十一,类型参数化

类型参数化   在scala中,类型参数化(类似于泛型)使用方括号实现,如:Foo[A],同时,我们称Foo为高阶类型。如果一个高阶类型有2个类型参数,则在声明变量类型时可以使用中缀形式来表达,此时也称该高阶类型为中缀类型,示例如下:          class Foo[A,B]          val x:Int Foo String = null     // Int FooStr

Andypan的智慧书屋 625

scala基础语法—数组、

1、使用类型参数化数组 在Scala中,可以使用new实例化类,创建对象的实例时,可以使用数值或类型参数。使用方括号来指明数据类型参数。如下: val helloStrings = new Array[String](2) helloStrings(0)="Hello" helloStrings(0)="world!\n" for(i <- 0 to 1) print(helloStrin...

qq_37797234的博客 254

java 通用数组_Java中的通用数组

基本上,泛型和数组不会混合。简短的回答是你可以解决这个问题。更长的答案是你可能不应该,我会解释原因。privateComparable[]hashtable;...hashtable=(Comparable[])Array.newInstance(Comparable.class,tableSize);但是您无法创建参数化类型的数组。数组是协变的。这意味着它们在运行时保留其元素的类型。J...

weixin_36108931的博客 186

封装一个数组类模板,数组中可以存任意类型数据

【代码】封装一个数组类模板,数组中可以存任意类型数据。

qq_45925313的博客 265

数组(2):多维数组、数组与泛型

创建多维数组很方便。每对花括号括起来的集合都会把你带到下一级数组。你可以看到基本类型数组的值在不进行显式初始化的情况下,会被自动初始化。对象数组会被初始化为null。第一个new创建了数组,其第一维长度是由随机数确定的,其他维的长度则没有定义。位于for循环内的第二个new则会决定第二维的长度;直到碰到第三个new,第三维的长度才得以确定。可以用类似的方法处理非基本类型的对象数组。你可以看到spheres是另外一个粗糙数组,其每一个对象列表的长度都是不同的。

游王子og的博客 572

数组与泛型

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34248258的博客 128

trait类——类型萃取

       这里实现一个通用的计算数组类的数据求和函数。C++中用模板实现多态属于静态多态,trait类就是做为模板参数以实现静态多态。根据不同的模板参数类型,以实现不同模板数据类型所需的功能。其实说白了,就是利用模板的一些基本规则,将其合理的组合起来,以达到根据类型不同时函数的操作有细微个性的差别。 依据TDD开发模式,先写测试用例。 #include &lt;iostream&gt; ...

xunye的博客 500

PostgreSQL无法确定参数$1的数据类型导致的。这通常是因为在使用#{}作为参数绑定时,MyBatis无法推断出参数的具体类型

【代码】PostgreSQL无法确定参数$1的数据类型导致的。这通常是因为在使用#{}作为参数绑定时,MyBatis无法推断出参数的具体类型。

qq_44888952的博客 1158
上一篇: 使用 foreach 和 for 来实现迭代
下一篇: 阿里云和腾讯云混搭hadoop时namenode启动失败
YWF331
博客等级 码龄11年 10粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值