Scala 简单的泛型函数,不使用';不编译

Scala 简单的泛型函数,不使用';不编译,scala,generics,Scala,Generics,请看一下Scala中的这个函数,并告诉我为什么它不能编译 def alternative_identity[A <: Any, B <: Any](obj: A): B = { obj } def alternative_identity[A它不会编译,因为obj是A类型的对象,并且您从返回类型为B的函数返回它 即使A和B是Any的子类型,也无法知道B是否是A的基类 例如,String和Int是Any的子类型,但它们不能互换使用。它不编译,因为obj是A类型的对象,您从返回类型

请看一下Scala中的这个函数,并告诉我为什么它不能编译

def alternative_identity[A <: Any, B <: Any](obj: A): B = {
  obj
}

def alternative_identity[A它不会编译,因为
obj
A
类型的对象,并且您从返回类型为
B
的函数返回它

即使
A
B
Any
的子类型,也无法知道
B
是否是
A
的基类


例如,
String
Int
Any
的子类型,但它们不能互换使用。

它不编译,因为
obj
A
类型的对象,您从返回类型为
B
的函数返回它

即使
A
B
Any
的子类型,也无法知道
B
是否是
A
的基类


例如,
String
Int
Any
的子类型,但它们不能互换使用。

编译器应该如何知道
B
是什么?函数应该返回
B
,但它返回
A
。它们应该具有相同的类型吗?函数应该是什么但编译器知道obj是Any的子类型,因为a是Any的子类型。然后,编译器可以推断obj满足B的要求(是Any的子类型)。这个推理有什么错?如果我调用
alternative_identity[Int,Process](1)怎么办
?一个
Int
怎么会神奇地变成一个
过程呢?@PiotrNiedzwiedz-猴子是动物,犀牛是动物,但猴子不是犀牛。编译器怎么知道
B
是什么?函数应该返回
B
,但它返回
a
。它们应该有同一类型?函数应该做什么?但编译器知道obj是Any的子类型,因为a是Any的子类型。然后编译器可以推断obj满足B的要求(是Any的子类型)。这种推理有什么错?如果我调用
alternative_identity[Int,Process](1)怎么办
?一个
Int
如何神奇地变成一个
过程?@PiotrNiedzwiedz-猴子是动物,犀牛是动物,但猴子不是犀牛。