问题标签 [scala-generics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
97 浏览

scala - 具有特征实现的 Scala 泛型 -

我想构建一个消息队列消费者,它现在只有一个 Kafka 实现,但稍后,它也可以有其他实现。

这里的 NotificationConsumerRecords 是我从消息队列中使用的记录的抽象类。

和一个扩展它的案例类。

consume方法应该能够接受NotificationConsumerRecords的所有子类型,这就是为什么有consume[B <: NotificationConsumerRecords]

现在,当我为 Kafka 扩展这个特性并尝试实现消费时

或者

在这两种情况下,我都会遇到编译时错误。我想我明白这里的问题是编译器将它们视为某种通用类型而不是特定类型。

但是我不知道我应该怎么做才能让编译器知道这个 KafkaMessagingQueueConsumer 应该只接受 KafkaConsumerRecords。

0 投票
1 回答
255 浏览

scala - 具有泛型类型的 Spark reduceByKey (Scala)

我正在尝试使用 Scala 在 Spark 中创建一些简单的自定义聚合运算符。

我创建了一个简单的运算符层次结构,具有以下超类:

我还有一个伴生对象,它每次都构造适当的聚合器。请注意,每个运算符都可以指定它想要的值类型。

现在的问题是当我尝试调用时combineByKey

错误是:

根据我的需要,Value可以是数字类型或元组,因此它没有边界定义。如果我将Value类型声明替换为:

Aggregator课堂上,然后一切正常。因此,我认为该错误与不知道编译时reduceByKey的确切类型有关。Value

关于如何解决这个问题的任何想法?

0 投票
1 回答
506 浏览

scala - 具有基础类型的类型参数 - Scala

假设我有一个特征,它的类型A是 的子类,Any并且调用的方法nextState具有与参数相同的类型。

然后这个 trait 被一个Tetris覆盖类型成员A和方法的类扩展nextState

现在在另一个名为ReinLib我的类中创建一个GameEnvironment,并且我还有一个接受参数的函数GameEnvironment#A

现在,如果我编译这段代码,我会得到一个错误

类型不匹配 state.type (与基础类型...

从我收集到的情况来看,这是因为编译器不确定是哪种类型state。但是我似乎找不到如何解决我的问题,所以我想知道如何解决这个问题。

0 投票
2 回答
747 浏览

scala - 元组的奇怪 Scala“类型不匹配”错误

我有一个函数map,它接受一个Parser和一个定义如下的函数:

我创建了一个Parser类型的对象[(Char, Char)]和一个函数(Char, Char) => String

然后我将这两个传递给map函数。

我希望一切正常,但我得到一个asString参数类型不匹配错误说

错误:(26, 41) 类型不匹配;

发现:(字符,字符)=>字符串

必需: ((Char, Char)) => 字符串

地图[(字符,字符),字符串](解析器,asString)

我试图明确指定mapas的类型,map[(Char, Char), String](parser, asString)但这也无济于事。

这里的类型T1是 char 元组(Char, Char)并且T2String. 因此,该函数(Char, Char) => String应该是输入,但 scala 期待不同的类型。

我在这里想念什么?为什么期待((Char, Char)) => String而不是(Char,Char) => String

我正在使用 Scala 2.12。不知道这是否相关。

感谢您的帮助。

0 投票
0 回答
30 浏览

scala - Scala 泛型多类型变体

我用 Scala 类型做了一些实验

并试图做这样的事情:

试图运行这个:

我如何在不添加特征的情况下正确地做到这一点?

不是这样的。还有其他一些方法吗?

0 投票
0 回答
395 浏览

scala - Avro4s 通用 toByteArray / fromByteArray

我对 Avro4s 的通用版本 toByteArray / fromByteArray 函数有疑问

我发现这个带有泛型类型问题的 Avro 序列化

这是有效的:

但这不是!

它抛出编译异常:

错误:(48, 44) 找不到 com.sksamuel.avro4s.ToRecord[T] 类型的证据参数的隐式值 val output = AvroOutputStream.binaryT 错误:(48, 44) 方法二进制的参数不足:(隐式证据23 美元:com.sksamuel.avro4s.SchemaFor[T],隐含证据 24 美元:com.sksamuel.avro4s.ToRecord[T])com.sksamuel.avro4s.AvroBinaryOutputStream[T]。未指定值参数证据 $24。val 输出 = AvroOutputStream.binaryT

我做错了什么?

upd 愚蠢的错误

一定是

:D

关于尚未解决的问题

如果类的字段之一是 AnyRef

编译失败:找不到隐式 SchemaFor ...

0 投票
1 回答
134 浏览

scala - 如何设置 AnyRef 的类型边界以使其仅为案例类

假设我有一些案例类

我想定义一些以 A : AnyRef 作为参数的函数。但!我想设置它的边界:

  1. A 是 AnyRef 但不是对象
  2. A 是 AnyRef 但仅限案例类

类似的东西

def caseClassProcessor[A](A: AnyRef <: Some bounds) = ???

def notObjectProcessor[A](A: AnyRef ! Object) = ???

有可能吗?

0 投票
1 回答
726 浏览

java - 在 Scala 中使用 Java 类时“对重载定义的模糊引用”

我在我的 Scala 中使用一个 Java 类,它生成ambiguous reference to overloaded definition. 这是解释这个问题的代码。

IComponent.java

组件.java

BComponent.scala

组件用户.scala

当我尝试编译BComponent.scala并且ComponentUser.scala编译失败并显示以下消息时。

Java 类代表一个我无法控制的库。我考虑过使用反射,但它并不能很好地服务于用例。super[AComponent].callme也不能解决问题。如何解决这种情况,以便代码编译并AComponent.callme在运行时调用?

0 投票
1 回答
273 浏览

scala - Structural types with generics in Scala

I tried to define a structural type which is matched to an instance with a generic type. Like in this example code:

but I get a compilation error:

Parameter type in structural refinement may not refer to an abstract type defined outside that refinement def add[T](container: {def add(s: T): Boolean})(element: T): Unit = {

When I get rid of the generic type in the method and write the code like this:

it compiles but I get a runtime exception:

java.lang.NoSuchMethodException: java.util.HashSet.add(java.lang.String)

My question is: How to correctly define the structural type, so it can work with Java collections?

Note that it cannot replace them with Scala collection (it will be used with a Java library).

0 投票
1 回答
172 浏览

scala - 使用 Ordered trait 扩展泛型类型会导致 sbt 编译器出现“类型的发散隐式扩展”错误