首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Scala编译器会失败,并显示"no ':_*‘annotation allowed here“,而Row却接受varargs?

Scala编译器会失败并显示"no ':_*' annotation allowed here"的原因是在使用可变参数(varargs)时,Scala编译器要求在参数列表中使用特定的语法来表示可变参数的展开。而在某些情况下,如果没有正确使用这个语法,编译器会报错。

具体来说,当我们使用可变参数时,需要在参数名后面加上冒号和星号(':_*')来表示参数的展开。这样编译器才能正确地将可变参数展开为一个参数序列。

而对于Row对象来说,它是Spark中的一个数据结构,用于表示一行数据。在Row对象中,可变参数的展开是由Spark框架自动处理的,因此我们不需要手动使用':_*'语法来表示可变参数的展开。

总结起来,Scala编译器会失败并显示"no ':*' annotation allowed here"是因为在使用可变参数时没有正确使用':*'语法来表示参数的展开。而Row对象之所以可以接受可变参数,是因为Spark框架会自动处理可变参数的展开。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第32项:谨慎地结合泛型和可变参数(Combine generics and varargs judiciously)

参考链接: Java中的可变参数(Varargs) 可变参数方法(第53项)和泛型都在Java 5时添加到了平台中,所以你可能会期望它们优雅地相互作用;可悲的是,它们不能相互作用。...它会导致编译器自动生成的数据类型转换失败,违反泛型类型系统的基本保证。...它的最后一行有一个由编译器生成的不可见转换。这种转换失败,说明类型安全性已经受到损害,并且在一般的可变参数数组中存储值是不安全的。    ...这个例子引出了一个有趣的问题:为什么使用泛型可变参数声明方法是合法的,而显示创建泛型数组是非法的?换句话说,为什么前面显示的方法只生成警告,127页的代码片段生成错误?...为了使这个具体,请考虑以下泛型方法,它接受三个类型为T的参数返回一个包含两个参数的数组,这些参数是随机选择的:  static T[] pickTwo(T a, T b, T c) {

1.4K20
  • Annotation: 代码的修饰符

    Table of Contents 简介: 是什么, 用途, 为什么有用 使用: 一个简单例子,如@Override。系统提供的annotation,做成列表 定义新的annotation。...Annotation可以向编译器提供一些信息,如检测错误(@Override)、消除编译告警(@SuppressWarning)。 编译期生成代码(@Junit)。...和comment一样,annotation也能够起到描述代码功能。但它还具有检查机制。 为什么是需要的?有些信息无法通过代码表达出来,此时通过Annotation可以很好的达到。...编译器会打印一个告警,如果这个元素还被使用 @Override 被修饰元素覆盖基类的定义。 @SuppressWarnings 消除一个编译告警。...接受一个参数 @SafeVarargs 指明方法不会对varargs做不安全的操作。

    51260

    挑逗 Java 程序员的那些 Scala 绝技

    有个问题一直困扰着 Scala 社区,为什么一些 Java 开发者将 Scala 捧到了天上,认为它是来自上帝之吻的完美语言;另外一些 Java 开发者却对它望而却步,认为它过于复杂难以理解。...这种类型的错误在 Java 中非常容易发生,因为 getCurrentUserId() 方法很可能因为重构改变了返回类型, Java 编译器却在关键时刻背叛了你,没有报告任何的编译错误。...原生字符串 在 Scala 中,我们可以直接书写原生字符串不用进行转义,将字符串内容放入一对三引号内即可: //包含换行的字符串 val s1= """Welcome here....通过 Scala 提供的集合操作,我们基本上可以实现 SQL 的全部功能,这也是为什么 Scala 能够在大数据领域独领风骚的重要原因之一。...异步任务可能成功也可能失败,所以我们需要一种既可以表示成功,也可以表示失败的数据类型,在 Scala 中它就是 TryT。TryT 有两个子类型,SuccessT表示成功,FailureT表示失败

    2K70

    挑逗 Java 程序员的那些 Scala 绝技

    社区,为什么一些 Java 开发者将 Scala 捧到了天上,认为它是来自上帝之吻的完美语言;另外一些 Java 开发者却对它望而却步,认为它过于复杂难以理解。...这种类型的错误在 Java 中非常容易发生,因为 getCurrentUserId() 方法很可能因为重构改变了返回类型, Java 编译器却在关键时刻背叛了你,没有报告任何的编译错误。...原生字符串 在 Scala 中,我们可以直接书写原生字符串不用进行转义,将字符串内容放入一对三引号内即可: //包含换行的字符串 val s1= """Welcome here....异步任务可能成功也可能失败,所以我们需要一种既可以表示成功,也可以表示失败的数据类型,在 Scala 中它就是 Try[T]。...在不同的库间实现无缝对接 当传入的参数类型和目标类型不匹配时,编译器尝试隐式转换。利用这个功能,我们将已有的数据类型无缝对接到三方库上。

    1.5K60

    Java注解(Annotation):请不要小看我!

    为什么我会有这么大的脑洞呢?因为当我试着去翻译Annotation这个单词的时候,得到的结果是“注释”不是“注解”。...01、为什么要使用注解呢? 为什么要使用注解呢?让我们从另外一个问题说起。 “跨域”这两个字就像一块狗皮膏药黏在每一个前端开发者的身上;我也不例外,虽然我并不是一个纯粹的前端开发者。...* Methods specified here override those specified via {@code RequestMapping}....最后 我想说的是,注解有许多用处,主要有: 提供信息给编译器编译器可以利用注解来探测错误和警告信息。 编译阶段时的处理: 软件工具可以利用注解信息来生成代码、HTML文档。...运行时的处理: 某些注解可以在程序运行的时候接受代码的提取。

    35240

    挑逗 Java 程序员的那些 Scala 绝技

    昨天,看到一篇介绍 Scala 技巧的文章,作者的语言很风趣,从 val,字符串,集合,链式调用等多个角度来探讨这门语言的优雅之处,使得我们更容易接受它,愿意花时间去深入了解它。...有个问题一直困扰着 Scala 社区,为什么一些 Java 开发者将 Scala 捧到了天上,认为它是来自上帝之吻的完美语言;另外一些 Java 开发者却对它望而却步,认为它过于复杂难以理解。...虽然这是由于 Java 的历史原因导致的,但是由于 var 的引入,导致这个错误不断的蔓延。 很显然,在 Scala 中,这种低级错误是无法逃过编译器法眼的。 ?...在这个例子里,使用伴生对象方法实例化对象的代码,与上面使用类构造器的代码完全一样,编译器优先选择伴生对象的 apply 方法。...异步任务可能成功也可能失败,所以我们需要一种既可以表示成功,也可以表示失败的数据类型,在 Scala 中它就是 Try[T]。

    1K20

    Java注解(Annotation):请不要小看我!

    为什么我会有这么大的脑洞呢?因为当我试着去翻译Annotation这个单词的时候,得到的结果是“注释”不是“注解”。...01、为什么要使用注解呢? 为什么要使用注解呢?让我们从另外一个问题说起。 “跨域”这两个字就像一块狗皮膏药黏在每一个前端开发者的身上;我也不例外,虽然我并不是一个纯粹的前端开发者。...* Methods specified here override those specified via {@code RequestMapping}....最后 我想说的是,注解有许多用处,主要有: 提供信息给编译器编译器可以利用注解来探测错误和警告信息。 编译阶段时的处理: 软件工具可以利用注解信息来生成代码、HTML文档。...运行时的处理: 某些注解可以在程序运行的时候接受代码的提取。 别忘了: ? 四书章句集注

    47820

    比较Go、Rust、Scala、Java、Kotlin、Python、Typescript 和 Elm中的编译器错误

    语言 编译器消息 Java 非常简短的编译器错误,措辞令人困惑 Scala 良好的编译器错误,显示了有问题的数值 Kotlin 简短、不清楚的错误消息 Python 运行时错误,简短但比 Java 更清晰的措辞...今天我们将研究编译器错误。编译器错误越完善、越有帮助,开发人员就能越快地解决问题继续编码。...让我们看看它在编译器错误方面的表现。 它向你抛出一个大型错误消息,其中包含一些信息。它是第一个尝试帮助你显示类似方法的,该方法称为 error1。它还显示了尝试查找方法的结构体。...有些人可能称之为“保姆编译器”,但我乐于接受任何帮助,因为我总是可以减少错误报告。...它显示第二个参数是错误的,不是第一个。

    14710

    【Rust日报】2022-05-06 - 用 Rust 构建爬虫:抓取和解析 HTML

    试图去寻找“银弹”逻辑的计算机程序似乎注定要失败。...让我们看看现代编译器和类型系统如何帮助防止许多错误,从而帮助提高每个人的安全性降低软件生产和维护的成本。...case StatusPublished: // ... } 但是,如果我们添加了 StatusArchived Status = 3 变量忘记更新这条 switch 语句,编译器仍然很乐意接受程序让我们引入一个错误...如果我们忘记更新CreateUser函数,编译器仍然愉快地接受代码不做任何更改使用int64:的默认值0,这可能不是我们想要的。...但是强大的类型系统和相关的编译器是任何想要大幅减少软件中的错误数量让用户/客户满意的人的首选武器。

    93330

    为Play初学者准备的Scala基础知识

    Scala将这两种编程语言完美的融合到一起,形成一门更加强大的JVM语言,同时Scala修正了Java很多不合理的设计,新增了更多高级特性,学习Scala的同时也是对Java的一次深度回顾,让你对编程语言的理解更加地深刻...Java认为他所面对的程序员是一帮小白,容易犯错误,所以想方设法的限制你,避免你犯错;Scala则认为他所面对的程序员是一帮天才,所以尽可能的向他敞开编程语言宝库,给他更大的自由度去想象和创作。...定义一个case class的代码如下: case class Currency(value: Double, unit: String) 当你定义了一个case class之后,编译器自动帮你做如下事情...6 常用类介绍 6.1 String 在Scala中,String更加方便好用: //原始字符串一对三引号`"""`括起来,可包含多行字符串,内容不需要转义 """Welcome here....提供的List基本可以实现SQL查询的所有功能,这也是Spark为什么基于Scala开发的原因。

    1.8K60

    Java 进阶巩固:什么是注解以及运行时注解的使用

    这里的 @Override 没有值,只是一个修饰作用,告诉编译器这个方法要覆盖父类的方法,编译器会去检查父类有没有这个方法。...,用于标记那些不应该被使用的代码,如果使用了过时的代码,编译器会发出警告 @SafeVarargs : 空注解,(varargs 可变参数)用于标记构造函数或者方法,通知编译器,这里的可变参数相关的操作保证安全...不必显式的指明键值对,是一种快捷方法 int value(); } 注解除了名字和接口有些相似,内容也很相似,都是声明一个方法,规定返回值,不同的是这里的方法其实是个属性,返回值规定了属性的类型(至于为什么要声明成方法不是属性...注意:如果你的注解中创建了多个属性,但是使用时只需要使用某几个,这时编译器提示你有没有指明的属性。...但被人诟病的是,运行时注解需要使用大量 Java 反射引起较为严重的性能问题。 在使用运行时注解时需要小心,在调用方法时注意对异常的捕获,避免调用失败

    85660

    Java 进阶巩固:什么是注解以及运行时注解的使用

    这里的 @Override 没有值,只是一个修饰作用,告诉编译器这个方法要覆盖父类的方法,编译器会去检查父类有没有这个方法。...,用于标记那些不应该被使用的代码,如果使用了过时的代码,编译器会发出警告 @SafeVarargs : 空注解,(varargs 可变参数)用于标记构造函数或者方法,通知编译器,这里的可变参数相关的操作保证安全...不必显式的指明键值对,是一种快捷方法 int value(); } 注解除了名字和接口有些相似,内容也很相似,都是声明一个方法,规定返回值,不同的是这里的方法其实是个属性,返回值规定了属性的类型(至于为什么要声明成方法不是属性...注意:如果你的注解中创建了多个属性,但是使用时只需要使用某几个,这时编译器提示你有没有指明的属性。...但被人诟病的是,运行时注解需要使用大量 Java 反射引起较为严重的性能问题。 在使用运行时注解时需要小心,在调用方法时注意对异常的捕获,避免调用失败

    92660

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程二

    以下示例显示了如何插入一行检索其内容: 示例 55....Mono如果查询没有返回结果,则返回完成不发出对象。 one(): 只消耗一行,返回一个Mono. Mono如果查询没有返回结果,则返回完成不发出对象。...它还准备插入语句以接受Person要插入的对象。 提供一个标量Person对象。或者,您可以提供 aPublisher来运行INSERT语句流。此方法提取所有非null值插入它们。...更新数据首先通过接受Update指定的分配来指定要更新的表。它还接受Query创建WHERE子句。...如果没有配置基础包,基础设施扫描带注释的配置类的包。以下示例显示了如何对存储库使用 Java 配置: 示例 59.

    1.3K10

    Scala

    y:Int) => x * y //该函数接受⼀一个参数⽣生成另外⼀一个接受单个参数的函数 3 这样的话,如果需要计算两个数的乘积的话只需要调⽤用: 4 mulOneAtTime(5)(4) 4、scala...当编译器发现类型不匹配时,自动地查找可用的隐式转换函数或者隐式类来进行类型转换。   需要注意的是,隐式转换的滥用可能导致代码难以理解和维护。...由于我们已经定义了一个 Double 类型的隐式类 DistanceOps,编译器自动地将 Double 类型的值进行隐式转换,从而让我们可以使用 distanceTo 方法: val p1 = Point...在Java中,null是一个关键字,不是⼀个对象,当开发者希望返回一个空对象时,返回了了⼀个关键字,为了解决这个问题,Scala建议开发者返回值是空值时,使⽤Option类型,在Scala中null是...高阶函数指能接受或者返回其他函数的函数,scala中的filter map flatMap函数都能接受其他函数作为参数。

    18830

    【面试题精讲】Java什么是可变长参数?

    可变长参数(Variable Arguments)是 Java 中的一种特性,也称为 varargs。它允许方法接受不定数量的参数。 在 Java 中,我们通常需要指定方法的参数类型和数量。...但有时候,我们希望能够灵活地传递任意数量的参数给方法,不需要提前确定参数的个数。这就是可变长参数的作用所在。 2. 为什么需要可变长参数? 使用可变长参数可以简化代码,并且使得方法更加灵活。...编译器会将这些参数封装成一个数组,并将其传递给方法。 4....numbers,通过增强型 for 循环遍历打印出所有的数字。...可变长参数的缺点 可能引发歧义:如果同时存在多个重载方法,其中一个方法接受可变长参数,另一个方法接受数组参数,那么在调用时可能引发歧义。 7.

    26920
    领券