Я хотел бы создать универсальный класс с параметром типа T
, который затем создает экземпляры внутреннего класса, обертывающие значения типа T
. Я подумал, что если бы я использовал верхнюю границу, чтобы сказать, что T
должен быть подтипом, например. String
, я смогу создавать экземпляры внутреннего класса, инициализированного с помощью String
.
class Test[T <: String] {
private class TestEntry(val value: T)
def init: Unit = {
new TestEntry("")
}
}
Но я получаю следующую ошибку:
<console>:12: error: type mismatch;
found : java.lang.String("")
required: T
new TestEntry("")
^
На самом деле, для моей цели можно было бы опустить верхнюю границу и вызвать new TestEntry(null)
, но компилятор даже не принимает null
.
Что мне не хватает?
Изменить:
Позвольте мне перефразировать мой пример, мне нужно что-то вроде этого: я должен иметь возможность протестировать абстрактный сервис роскошных автомобилей с любым конкретным автомобилем без необходимости повторной реализации метода тестирования. Таким образом, и абстрактный класс (или трейт), и методы должны работать с подклассами роскошных автомобилей.
class Car
class LuxuryCar extends Car
class Mercedes extends LuxuryCar
class Ferrari extends LuxuryCar
trait LuxuryCarService[CarType <: LuxuryCar] {
def testWithCar(car: CarType): Unit = {}
def testWithARandomLuxuryCar: Unit = test(new Mercedes)
def testWithNoCar: Unit = test(null)
}
trait MercedesCarService extends LuxuryCarService[Mercedes]