|
|
1
11
请注意,该错误与泛型无关,如果使用接口且类型是交叉点,则会得到相同的结果:
如果在“doSomething”中出现同样的错误,编译器无法解决歧义。你想解释为XX还是YY?必须使用强制转换来指定它。 但是如果你有一个层次结构,比如“YY扩展XX”和“XY实现YY”,编译器可以推断出正确的调用方法。 |
|
|
2
8
编译器是正确的,可以避免混乱。 AlphaBetSoup是汤的一个亚型,也是HasA、HasB和HasC的一个亚型 因此,它适合两种版本的分派 由于Soup不是HasA、HasB或HasC的子类型,也不能说一个版本比另一个版本更“具体”。 因此,您将正确地获得错误。 重载方法不应该是模糊的。如果您有一个混合了这两种类型的类型,并且每种类型都有一个重载,请更改层次结构或消除重载。使用子类型和重载是错误的。 |
|
|
3
4
让我用一个非常简单的程序来解释这一点: 下面的代码说明了由于类型编译器错误,该方法的原因是不明确的。
现在的问题很明显:因为String实现了Comparable和Comparable 可序列化,编译器无法知道要调用哪个方法。 一个简单的演员阵容就能解决这个问题: 模棱两可的方法((可比较的)“酒吧”); http://www.javaneverdie.com/java/the-method-is-ambiguous-for-the-type/ 在我们的例子中,方法分派正在产生问题。看见
和
现在如果你打电话
|
|
4
1
请注意,您没有真正的问题,因为您感兴趣调用的方法已经被动态绑定调用了。
跑步
因此
|
|
|
5
1
并不是说你应该保持超负荷
或者将汤版本称为:
不过,解决这个问题的更好办法是不要让电脑超载
|