Я хочу создать потребителя очереди сообщений, который на данный момент будет иметь только одну реализацию для Kafka, но позже он может иметь и другие реализации.
trait MessagingQueueConsumer {
def consume[B <: NotificationConsumerRecords](topic: String, userNames: List[String]): TrieMap[String, B]
}
Здесь NotificationConsumerRecords - это абстрактный класс для записей, которые я получаю из очереди сообщений.
sealed abstract class NotificationConsumerRecords
и класс case, расширяющий его.
case class KafkaConsumerRecords[K,V](records: List[ConsumerRecord[K,V]]) extends NotificationConsumerRecords
А метод consumer должен иметь возможность принимать все подтипы NotificationConsumerRecords, поэтому существует take [B ‹: NotificationConsumerRecords]
Теперь, когда я расширяю эту черту для Kafka и пытаюсь реализовать потреблять
class KafkaMessagingQueueConsumer extends MessagingQueueConsumer {
override def consume[KafkaConsumerRecords](topic: String, userNames: List[String]): TrieMap[String, KafkaConsumerRecords[String, String]] = {}
}
Or
class KafkaMessagingQueueConsumer extends MessagingQueueConsumer {
override def consume[KafkaConsumerRecords[String, String]](topic: String, userNames: List[String]): TrieMap[String, KafkaConsumerRecords[String, String]] = {}
}
В обоих случаях я получаю ошибку времени компиляции. и я думаю, я понимаю, что проблема здесь в том, что компилятор принимает их как некоторый общий тип, а не как конкретный тип.
Но я не знаю, что мне делать, чтобы сообщить компилятору, что этот KafkaMessagingQueueConsumer должен принимать только KafkaConsumerRecords.
MessagingQueueConsumer
, пока ваша чертаConsumer
- person Noam Shaish   schedule 30.04.2018