问题标签 [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.
scala - 具有特征实现的 Scala 泛型 -
我想构建一个消息队列消费者,它现在只有一个 Kafka 实现,但稍后,它也可以有其他实现。
这里的 NotificationConsumerRecords 是我从消息队列中使用的记录的抽象类。
和一个扩展它的案例类。
而consume方法应该能够接受NotificationConsumerRecords的所有子类型,这就是为什么有consume[B <: NotificationConsumerRecords]
现在,当我为 Kafka 扩展这个特性并尝试实现消费时
或者
在这两种情况下,我都会遇到编译时错误。我想我明白这里的问题是编译器将它们视为某种通用类型而不是特定类型。
但是我不知道我应该怎么做才能让编译器知道这个 KafkaMessagingQueueConsumer 应该只接受 KafkaConsumerRecords。
scala - 具有泛型类型的 Spark reduceByKey (Scala)
我正在尝试使用 Scala 在 Spark 中创建一些简单的自定义聚合运算符。
我创建了一个简单的运算符层次结构,具有以下超类:
我还有一个伴生对象,它每次都构造适当的聚合器。请注意,每个运算符都可以指定它想要的值类型。
现在的问题是当我尝试调用时combineByKey
:
错误是:
根据我的需要,Value
可以是数字类型或元组,因此它没有边界定义。如果我将Value
类型声明替换为:
在Aggregator
课堂上,然后一切正常。因此,我认为该错误与不知道编译时reduceByKey
的确切类型有关。Value
关于如何解决这个问题的任何想法?
scala - 具有基础类型的类型参数 - Scala
假设我有一个特征,它的类型A
是 的子类,Any
并且调用的方法nextState
具有与参数相同的类型。
然后这个 trait 被一个Tetris
覆盖类型成员A
和方法的类扩展nextState
。
现在在另一个名为ReinLib
我的类中创建一个GameEnvironment
,并且我还有一个接受参数的函数GameEnvironment#A
。
现在,如果我编译这段代码,我会得到一个错误
类型不匹配 state.type (与基础类型...
从我收集到的情况来看,这是因为编译器不确定是哪种类型state
。但是我似乎找不到如何解决我的问题,所以我想知道如何解决这个问题。
scala - 元组的奇怪 Scala“类型不匹配”错误
我有一个函数map
,它接受一个Parser
和一个定义如下的函数:
我创建了一个Parser
类型的对象[(Char, Char)]
和一个函数(Char, Char) => String
。
然后我将这两个传递给map
函数。
我希望一切正常,但我得到一个asString
参数类型不匹配错误说
错误:(26, 41) 类型不匹配;
发现:(字符,字符)=>字符串
必需: ((Char, Char)) => 字符串
地图[(字符,字符),字符串](解析器,asString)
我试图明确指定map
as的类型,map[(Char, Char), String](parser, asString)
但这也无济于事。
这里的类型T1
是 char 元组(Char, Char)
并且T2
是String
. 因此,该函数(Char, Char) => String
应该是输入,但 scala 期待不同的类型。
我在这里想念什么?为什么期待((Char, Char)) => String
而不是(Char,Char) => String
?
我正在使用 Scala 2.12。不知道这是否相关。
感谢您的帮助。
scala - Scala 泛型多类型变体
我用 Scala 类型做了一些实验
并试图做这样的事情:
试图运行这个:
我如何在不添加特征的情况下正确地做到这一点?
不是这样的。还有其他一些方法吗?
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 ...
scala - 如何设置 AnyRef 的类型边界以使其仅为案例类
假设我有一些案例类
我想定义一些以 A : AnyRef 作为参数的函数。但!我想设置它的边界:
- A 是 AnyRef 但不是对象
- A 是 AnyRef 但仅限案例类
类似的东西
def caseClassProcessor[A](A: AnyRef <: Some bounds) = ???
def notObjectProcessor[A](A: AnyRef ! Object) = ???
有可能吗?
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
在运行时调用?
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).