Scala:将具体类型与带有边界的泛型相符

sub*_*ubb 3 generics scala

我已经使用泛型定义了一个函数,我在理解编译器给出的错误时遇到了一些麻烦.问题可以简单地表达为:

def myfunc[T <: MyClass](param:MyClass):T = param
Run Code Online (Sandbox Code Playgroud)

param在我体内给出了这个错误:MyClass类型的表达式不符合预期的类型T.

为什么?param适合T的上限.我怎样才能做出像这样的工作而不诉诸于T?

Jat*_*tin 8

好.假设你有以下内容:

class Animal
class Dog extends Animal
Run Code Online (Sandbox Code Playgroud)

现在让我们的功能如下:

def myfunc[T <: Animal](param:Animal):T = param
Run Code Online (Sandbox Code Playgroud)

现在假设,编译器不会抛出错误.在调用时myfunc[Dog](new Animal),它应该Dog根据函数定义返回一个.但实际上,你只是回来了Animal.哪个不应该被允许.因此错误.

现在它曾经:

def myfunc[T >: Dog](param:Dog):T = param
Run Code Online (Sandbox Code Playgroud)

在这里打电话myfunc[Animal](new Dog).返回类型是Animal.但是函数返回的Dog是正确DogAnimal.希望它澄清一下

  • 整个页面上最清晰的答案。举例说明,新鲜空气的呼吸源是动物,而不是T和U。 (2认同)