当前位置: 首页 > news >正文

怎样建设网站客服服务/上海网站关键词排名

怎样建设网站客服服务,上海网站关键词排名,网站建设 推广薪资,如何在自己网站上做支付宝吗Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把 ... 开始位置到最后一个参数都收纳到数组中去,所以变参之所以…

Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把 ... 开始位置到最后一个参数都收纳到数组中去,所以变参之所以要放在最后的位置上,且一个方法中最多只能有一个变参类型。

这里主要是对比 Scala 对变参方法的调用,基本调用法当然是没问题的,但是在传入数组作为变参的参数列表与 Java 相对时就稍有变化了。

另外提一下,如果想传入 List 作为变参列表,而不是整体作为变参的第一个元素就是调用集合的 toArray() 方法转换成一个数组传入。

下面看 Java 中对变参方法的调用,参数列表和数组

public class JavaVarArgs {

public static void main(String[] args) {

foo("a", "b", "c");

foo(new String[]{"d", "e"});

}

public static void foo(String...params) {

System.out.println(params + " : " + params.length);

for(String s: params) {

System.out.println(s);

}

}

}

从输出结果能够很明白的看出变参 params 实际上就是一个数组

[Ljava.lang.String;@3f91beef : 3

a

b

c

[Ljava.lang.String;@1a6c5a9e : 2

d

e

我们知道 Scala 和 Java 之间可以互相调用,现在写一段 Scala 代码来调用 foo() 方法

object ScalaVarArgs {

def main(args: Array[String]) {

JavaVarArgs.foo("a", "b", "c")

// JavaVarArgs.foo(Array[String]("d", "e"))

}

}

JavaVarArgs.foo("a", "b", "c") 调用没问题

而 JavaVarArgs.foo(Array[String]("d", "e")) 会有编译问题

Type mismatch: expected String, actual Array[String]

Java 在调用变参方法时可以直接传入相应类型的数组,而 Scala 确不允许这么做了,因它试图把 Array[String] 整体作为一个元素传递给 foo() 方法,而 foo() 要求的元素类型是字符串,所以编译不过。

而 Scala 这时该如何使得与 Java 调用变参方法时的行为一致呢,那就是在调用时再附加说明:是要把数组中的元素逐个传递级变参,写法

JavaVarArgs.foo(Array[String]("d", "e") :_*)

这样的调用输出就是

[Ljava.lang.String;@7a718e31 : 2

d

e

如果从上面的例子说来,我们的运气还不错,因为编译器告诉了你出现了什么问题。最麻烦的问题总是在能编译,但运行时诡异的情况。

因为在我本人实际中遭遇到的情形是变参类型是 Object 的方法,形如

public static void foo(Object...params) {

System.out.println(params + " : " + params.length);

for(Object o: params) {

System.out.println(o);

}

}

上面把参数改为 Object...params, 不会改变 Java 传数组调用它的行为,但却增加了 Scala 调用它时的排错难度。

在 Scala 中使用 foo(Array[String]("d", "e") 调用并没有编译错误,加入上面的调试代码才发现,不管传入多大的数组,总是输出像

[Ljava.lang.Object;@7814d044 : 1

[Ljava.lang.String;@ea25c1

说方法只接收到了一个元素,类型被识别为形参的类型,不过进一步遍历变参,发现第一个元素是一个字符串数组,所以 Scala 把 Array[String]("d", "e") 整体作为 params 的第一个元素传给了 foo() 方法。写成

foo(Array[String]("d", "e") : _*)

是为了把数组拆散了传给 foo() 方法。

起初以为是 Scala 调用 Java 的变参方法需要这么做,后来重新用 Scala 实现下变参方法

def foo(params: AnyRef*) {

println(params + " : " + params.length)

for (s

println(s)

}

}

用 Scala 代码来调用它,传入数组,如果不想整体作为一个元素时也必须加上 : _* 参数说明,同样的:

foo(Array[String]("d", "e") :_*)

在写这篇之前,我所认定的这是 Scala 调用变参方法的一个缺陷,: _* 似乎是一种默认行为,现在认为这恰恰是 Scala 的一个灵活性所在。Scala 提供了两种方式来传递数组给变参,而为何 Java 不让数组整体作为变参的一个元素呢,不过 Scala 放开这一特性,当变参为 Object... params 确实放大了 Bug 的出现机率。

以上就是Java 和 Scala 如何调用变参的详细内容,更多关于Java 和 Scala 调用变参的资料请关注脚本之家其它相关文章!

http://www.lbrq.cn/news/960157.html

相关文章:

  • 重庆奉节网站建设/网上推广用什么平台推广最好
  • 网站建设制作软件/网站推广的方法和途径
  • 做跨境电商被骗了三万/seo顾问是什么职业
  • 购物商城网站开发目的文档/市场营销策略
  • 洛阳做网站的公司/东莞做网站公司电话
  • 网站备案多久做一次/网络营销试卷
  • 黄石建委网工程建设城建网站/网站关键词怎么优化排名
  • 网址导航系统/网站seo优化公司
  • jquery 单击input输入框弹出选择框多用于人才类网站/今日头条指数查询
  • 宝安网站建设哪家便宜/seo优化是怎么优化的
  • 做网站怎么弄/网络营销的种类有哪些
  • 可做宣传的网站都有哪些/跨界营销案例
  • 南京做网站开发 待遇/邢台市seo服务
  • 小组网站建设方案书/自己如何制作网站
  • 景区网站建设材料/电脑系统优化工具
  • 做收费网站/太原推广团队
  • 做网站公司法人还要拍照吗/外包网站有哪些
  • wordpress博客 centtos/seo整站优化技术培训
  • 做外贸网站挣钱吗/企业网站建设的一般要素
  • 做网站推广维护需要学些什么/正规的培训学校
  • 介绍在家里做的点心的网站/信息流优化师面试常见问题
  • 网站开发的案例分析模板/阿里大数据分析平台
  • 武进常州做网站/关键词排名查询工具有什么作用?
  • 建站软件免费版下载/成都网站关键词推广
  • 宿迁网站制作公司/教育培训网站
  • 页游网站如何做推广/app推广平台
  • 怎样将自己做的网页加入网站/手机版怎么用百度快照
  • 合肥广告牌制作公司/seo精准培训课程
  • 形象类网站/域名解析ip地址
  • 高端网络工程师培训/seo研究中心vip课程
  • 物联网iot、mqtt协议与华为云平台的综合实践(万字0基础保姆级教程)
  • ThreadLocal 在 Spring 与数据库交互中的应用笔记
  • Python 之地址编码识别
  • 【JS笔记】Java Script学习笔记
  • Java Web项目Dump文件分析指南
  • QML vscode语法高亮和颜色区分。