Generics 带上界的内类

Generics 带上界的内类,generics,scala,scala-2.9,Generics,Scala,Scala 2.9,我想用类型参数T创建一个泛型类,然后创建一个内部类的实例,该类封装类型T的值。我想,如果我用上界告诉T必须是例如String的子类型,我将能够创建用String初始化的内部类的实例 class Test[T <: String] { private class TestEntry(val value: T) def init: Unit = { new TestEntry("") } } 您已经告诉它,T是String的子类。然后你转过身,试着

我想用类型参数
T
创建一个泛型类,然后创建一个内部类的实例,该类封装类型
T
的值。我想,如果我用上界告诉
T
必须是例如
String
的子类型,我将能够创建用
String
初始化的内部类的实例

class Test[T <: String] {

    private class TestEntry(val value: T)

    def init: Unit = {
        new TestEntry("")
    }
}

您已经告诉它,
T
String
的子类。然后你转过身,试着给它分配一个字符串!这是行不通的,就像这样:

class Car {}
class Mercedes extends Car {}         // Mercedes <: Car (T could be Mercedes)
def serviceLuxuryCar(m: Mercedes) {}  // This is like your TestEntry
serviceLuxuryCar(new Car)             // This won't work, it's not a Mercedes!
class-Car{}

类Mercedes扩展了Car{}//Mercedes放开类型参数。将内容声明为
LuxuryCar
而不是
CarType
。为什么您认为这里需要一个类型参数

我应该能够测试一个抽象的豪华汽车服务与任何特定的汽车,而不需要重新实施的测试方法

那么这就是类型应该说的:

def testWithCar(car: Car): Unit = {} // or LuxuryCar if you meant "with any specific luxury car"

我可能错过了什么,但是。。。为什么在这里使用泛型呢? 换句话说,为什么不呢


trait LuxuryCarService[LuxuryCar]

谢谢,我添加了一个更具体的例子(这个例子也不起作用,但我不知道如何解决)。假设你调用的测试方法是testWithCar,我不明白为什么你会期望在testWithARandomLuxuryCar中,一辆奔驰应该被一辆LuxuryCarService[Ferrari]接受,与@Rex Kerr的答案中的问题完全相同。
class Car {}
class Mercedes extends Car {}         // Mercedes <: Car (T could be Mercedes)
def serviceLuxuryCar(m: Mercedes) {}  // This is like your TestEntry
serviceLuxuryCar(new Car)             // This won't work, it's not a Mercedes!
def testWithCar(car: Car): Unit = {} // or LuxuryCar if you meant "with any specific luxury car"