我已经使用泛型定义了一个函数,我在理解编译器给出的错误时遇到了一些麻烦.问题可以简单地表达为:
def myfunc[T <: MyClass](param:MyClass):T = param
Run Code Online (Sandbox Code Playgroud)
它param在我体内给出了这个错误:MyClass类型的表达式不符合预期的类型T.
为什么?param适合T的上限.我怎样才能做出像这样的工作而不诉诸于T?
好.假设你有以下内容:
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是正确Dog的Animal.希望它澄清一下
| 归档时间: |
|
| 查看次数: |
8106 次 |
| 最近记录: |