Я хочу построить Потребитель очереди сообщений, который пока будет иметь только одну реализацию для 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
И метод потребления должен иметь возможность принимать все подтипы NotificationConsumerRecords, поэтому существует потребление [B <: NotificationConsumerRecords] </em>
Теперь, когда я расширяю эту черту для Кафки и пытаюсь реализовать потребление
class KafkaMessagingQueueConsumer extends MessagingQueueConsumer {
override def consume[KafkaConsumerRecords](topic: String, userNames: List[String]): TrieMap[String, KafkaConsumerRecords[String, String]] = {}
}
Или
class KafkaMessagingQueueConsumer extends MessagingQueueConsumer {
override def consume[KafkaConsumerRecords[String, String]](topic: String, userNames: List[String]): TrieMap[String, KafkaConsumerRecords[String, String]] = {}
}
Я получаю ошибку времени компиляции в обоих случаях. и я думаю, что я понимаю, что проблема здесь в том, что компилятор принимает их как некоторый универсальный тип вместо определенного типа.
Но я не знаю, что мне делать, чтобы компилятор знал, что этот KafkaMessagingQueueConsumer должен принимать только KafkaConsumerRecords.