Я хотел бы создать универсальный класс с параметром типа 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]